1

/myapp/add我希望 Django 对as的请求返回相同的响应/admin/myapp/mymodel/add

myproject/myapp/models.py定义模型并myapp/admin.py使用django.contrib.admin.

myproject/myapp/models.py

from django.db import models

class MyModel(models.Model):
  ...

myproject/myapp/admin.py

from django.contrib import admin
from .models import MyModel

admin.site.register(MyModel)

我被困在如何将请求路由到django.contrib.admin项目的urlpatterns

myproject/myproject/urls.py

urlpatterns = [
  url(r'^$', views.home_page, name='home'),
  url(r'^admin/', admin.site.urls),
  url(r'^myapp/add', ??????), 
]

从打印返回的resolve('/admin/myapp/mymodel/add/')结果看起来像是答案的一部分:

ResolverMatch(func=django.contrib.admin.options.add_view, args=(), kwargs={}, url_name=myapp_mymodel_add, app_names=['admin'], namespaces=['admin'])
4

1 回答 1

0

好吧,让我说这似乎是一件很奇怪的事情,但无论如何:

在文件中:django.contrib.admin.options.py我们看到:

class ModelAdmin(BaseModelAdmin):

我们看到add视图返回

_changeform_view()

它使用模板

django/contrib/admin/templates/change_form.html

所以你会想在你的视图中渲染那个模板。

但它会丢失一堆上下文项,

所以你基本上必须重新实现 django.admin.options._changeform_view

然后将模板复制django/contrib/admin/templates/change_form.html到您的应用程序的模板目录

def admin_add(request):
  # admin.changeform_view code here
  return render(request, "myapp/change_form.html", {context{)

附言。我假设管理站点视图假定用户是“超级用户”而不是普通用户,因此您也需要考虑这一点。

于 2018-07-29T21:21:53.803 回答