繁体   English   中英

反向 Django 管理 URL

[英]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 ,因此您可能只想在本地安装它以供开发使用。


资源:

django_extensions 安装文档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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM