[英]Reverse Django admin URLs
如this answer所述,我们可以使用url
标签来反转 Django 管理 URL。 但是,在此处显示的示例中,您需要传递给url
的字符串中的应用程序名称和模型名称。 有没有办法将它们作为参数传递? 我想做的是这样的:
{% url 'something here' app_name model_name object_id %}
我为'something here'
放了'something here'
?
我建议使用django_extensions
来使用它的show_urls
命令来查找 url 名称。
简单地做
pip install django_extensions
然后将django_extensions
添加到您的 INSTALLED_APPS
#settings.py
INSTALLED_APPS = [
#...
'django_extensions',
]
然后你可以运行
python manage.py show_urls
您可以将它与grep
一起使用来过滤掉您需要的相关 URL。 例如
python manage.py show_urls | grep password
/admin/auth/user/<id>/password/ django.contrib.auth.admin.user_change_password admin:auth_user_password_change
/admin/password_change/ django.contrib.admin.sites.password_change admin:password_change
/admin/password_change/done/ django.contrib.admin.sites.password_change_done admin:password_change_done
假设我们想在我们的模板中使用django.contrib.auth.admin.user_change_password
:
我们可以做的:
{% url "admin:auth_user_password_change" user.pk %}
PS 您的生产环境并不真正需要django_extensions
,因此您可能只想在本地安装它以供开发使用。
如果您想反转管理 url,默认的 admin.sites.urls 中有一个 urlpattern,如下所示:
urlpatterns = [
path('', wrap(self.index), name='index'),
path('login/', self.login, name='login'),
path('logout/', wrap(self.logout), name='logout'),
path('password_change/', wrap(self.password_change, cacheable=True), name='password_change'),
path(
'password_change/done/',
wrap(self.password_change_done, cacheable=True),
name='password_change_done',
),
path('jsi18n/', wrap(self.i18n_javascript, cacheable=True), name='jsi18n'),
path(
'r/<int:content_type_id>/<path:object_id>/',
wrap(contenttype_views.shortcut),
name='view_on_site',
),
]
查看上面的代码,您可以简单地在reverse('admin:index')
模板中使用{% url 'admin:index' %}
其他地方作为管理仪表板 url。 同样与所有其他管理网址模式相同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.