我希望Django返回与/myapp/add
相同的对/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'])
答案 0 :(得分: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{)
ps。我假设管理站点视图假定该用户是“超级用户”,而不是普通用户,因此您也要考虑这一点。