gpt4 book ai didi

django - Unable to create a custom admin template url, getting errors 模板错误 & 创建自定义管理站点错误

转载 作者:行者123 更新时间:2023-12-04 02:38:27 25 4
gpt4 key购买 nike

我正在使用这个博客: https://medium.com/@adriennedomingus/adding-custom-views-or-templates-to-django-admin-740640cc6d42

无法在 Django Admin 中制作自定义模板 View 。我收到 django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet

如果我在 settings.py 中注释掉应用程序,我会收到错误 admin.site.register(Template, TemplateAdmin) NameError: name 'Template' is not defined

如果我从 django.templates 导入模板然后我得到 TypeError: 'type' object is not iterable

无法做到:1) custom_admin_site.register &2) models.Template 未找到。说模型中没有模板。

我在 admin.py 上有这个:

from django.contrib import admin
from django.db import models
from django.templates import Template
class TemplateAdmin(admin.ModelAdmin):
change_form_template = ‘admin/test_attempt.html’

admin.site.register(Template, TemplateAdmin)

如果我在 CustomAdminSite 注册然后我得到 register for model in model_or_iterable: TypeError: 'MediaDefiningClass' object is not iterable 错误:

CustomAdminSite.register(Template, TemplateAdmin)

# Even the following doesnot work
# custom_site_admin.register(Template, TemplateAdmin)

我在 views.py 上有这个:

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader

def preview(self, request, object_id):
context = {}

context = {
**self.each_context(request),
'title': self.index_title,
# Unable to get this app_list as well
# 'app_list': app_list,
}

request.current_app = self.name
#load_template = request.path.split('/')[-1]
#template = loader.get_template('admin/' + load_template)
template = loader.get_template('admin/test_attempt.html')
return HttpResponse(template.render(context, request))

我在 urls.py 上有这个:

from .views import preview

class CustomAdminSite(admin.AdminSite):
def get_urls(self):
urls = super(CustomAdminSite, self).get_urls()
custom_urls = [
path(r’^admin/test/(?P<object_id>\d+)$’, self.admin_view(preview), name=”preview”),
]
return urls + custom_urls

我的 apps.py 上有这个:

class CustomAdminSiteConfig(AdminConfig):
default_site = 'batchexits.admin.CustomAdminSite'

我已将此添加到我的 settings.py 注册应用程序中:

'batchexits.admin.CustomAdminSiteConfig',

我读过这个: how to fix django admin "You don't have permission to view or edit anything."?

感谢任何帮助实现此工作的帮助。

最佳答案

我不是 100% 确定您要尝试做什么,但看起来您希望将自定义 View 添加到特定模型的标准 django 管理中。如果是这种情况,您可以不理会 AdminSite,您可能根本不需要对其进行自定义。我对您的代码进行了一些重新排列,使其更像是它需要的样子。我没有修复所有问题,因为我不确定你想要什么,所以不要复制和粘贴它,但我会解释相关的部分,希望能帮助你找到正确的方向。

您不需要在 settings.py 中向您的应用添加任何内容。管理员 django.contrib.admin 和希望你的应用程序我们也已经列出(如果没有,你需要先添加它,然后在你考虑为它们添加管理界面之前添加你的模型) .

class TemplateAdmin(admin.ModelAdmin):
change_form_template = ‘admin/test_attempt.html’ # 1

def get_urls(self): # 2
urls = super().get_urls()
admin_site = self.admin_site
custom_urls = [
path(
r’^(?P<object_id>\d+)/test/$’,
self.admin_view(self.preview), # 3
name="preview"),
]
return urls + custom_urls

def preview(self, request, object_id): # 4
context = {}

context = {
**self.each_context(request),
'title': self.index_title,
# Unable to get this app_list as well
# 'app_list': app_list,
}

request.current_app = self.name
#load_template = request.path.split('/')[-1]
#template = loader.get_template('admin/' + load_template)
template = loader.get_template('admin/test_attempt.html') # 4
return HttpResponse(template.render(context, request))


admin.site.register(Template, TemplateAdmin) # 5

#1

这是当您单击以检查或更改(或为此添加)您拥有的模型的特定实例时将使用的模板。如果您要链接到您的新 View ,则需要更改此模板并将链接添加到您在 # 3 中定义的任何 url。顺便说一句,如果您只想自定义此 View ,则可以忽略其他所有内容,只需将您需要的内容添加到该模板即可。

#2

您需要理解为什么我们必须使用 get_urls。通常要返回一个特定的 View ,您可以在 urls.py 中设置一些内容,它将指向您拥有的一个特定 View (通常在 views.py 之类的地方定义)。然而,我们想要添加一个 admin View ,并且所有以 admin/... 开头的 url 都在管理应用程序中处理。为了解决这个问题,django 在 ModelAdmin 中为我们提供了 get_urls 方法,因此我们可以添加额外的 View 。

#3

self.admin_view() 只是添加了一些关于授权的额外逻辑,因此我们不必为此担心。请注意,在上面的行中,我们只需要添加 url 的末尾部分,因此完整的 url 将是 admin/app/model//test

#4

这是我们定义额外 View 的地方,将 View 作为此 ModelAdmin 的方法添加是有意义的,因为它直接与其相关。

#5

在您遵循的教程中,作者必须有一些名为 Template 的模型(对于模型来说,这可能是一个非常容易混淆的名称),您需要替换 Template 使用您正在为之制作此 View 的任何模型)。将 TemplateAdmin 重命名为更合适的名称也很有意义(如果您的模型名为 Car,则将其命名为 CarAdmin)。

希望对您有所帮助。

编辑:按照您在下面评论中添加的链接,我猜您正在尝试完成此处概述的任务:https://github.com/ganeshkbhat/pr/blob/master/admintmpl/admin.py .即:

# TASK:
# need custom admin template inside admin that shows
# all questions assigned to user
# filter option sort by user

# TASK:
# Create test template which shows inside admin
# 1. question
# - INLINE options - 2 answers (4 options max)
# 2. question
# - INLINE options - 2 answers (4 options max)
# Submit
# On submit save to QuestionsAnswered

这些任务都可以在没有任何非常自定义的情况下完成,绝对不是您一直遵循的教程中需要的那种东西。我不打算在这里回答所有问题,因为它超出了这个问题的要求。但我建议您在这里查看 django 文档:https://docs.djangoproject.com/en/dev/ref/contrib/admin/它们提供了关于如何完成您需要的所有事情的解释。

关于django - Unable to create a custom admin template url, getting errors 模板错误 & 创建自定义管理站点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60531667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com