如this answer所述,我们可以使用url
标记来反转Django管理URL。但是,在此处显示的示例中,您需要在传递给url
的字符串中使用应用程序名称和型号名称。有没有办法将那些作为参数传递呢?我想要做的是这样的:
{% url 'something here' app_name model_name object_id %}
我该为'something here'
投入什么?
答案 0 :(得分:1)
我建议使用django_extensions
来使用其show_urls
命令来查找网址名称。
简单地做
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 %}
P.S。您的生产环境实际上并不需要django_extensions
,因此您可能只想将其安装在本地以供开发使用。
django_extensions installation documentation django_extensions commands
答案 1 :(得分:0)
如果您要撤消管理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',
),
]
查看上面的代码,您可以简单地在{% url 'admin:index' %}
的模板中使用reverse('admin:index')
,其他地方用于管理控制台的网址。与所有其他管理员网址格式相同