Python 反向Django管理URL

Python 反向Django管理URL,python,django,django-templates,Python,Django,Django Templates,如上所述,我们可以使用url标记来反转Django admin url。但是,在这里显示的示例中,您需要在传递到url的字符串中输入应用程序名称和模型名称。有没有办法把它们作为参数传递进来?我想做的是这样的: {% url 'something here' app_name model_name object_id %} 我应该为'somethine here'添加什么?我建议使用django\u extensions来使用它的show\u url命令来查找url名称 干脆 pip insta

如上所述,我们可以使用
url
标记来反转Django admin url。但是,在这里显示的示例中,您需要在传递到
url
的字符串中输入应用程序名称和模型名称。有没有办法把它们作为参数传递进来?我想做的是这样的:

{% url 'something here' app_name model_name object_id %}

我应该为
'somethine here'
添加什么?

我建议使用
django\u extensions
来使用它的
show\u url
命令来查找url名称

干脆

pip install django_extensions
然后将
django\u扩展添加到已安装的\u应用程序中

#settings.py
INSTALLED_APPS = [
    #...
    'django_extensions',
]
然后你就可以跑了

python manage.py show_urls
您可以将其与
grep
一起使用,以筛选出所需的相关URL。 e、 g

p.S.您的生产环境实际上不需要
django_扩展
,因此您可能只想在本地安装它以供开发使用。


资源:

如果要反转管理员URL,默认的admin.sites.url中有一个URL模式,如下所示:

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',
        ),
    ]
urlpatterns=[
路径(“”,wrap(self.index),name='index'),
路径('login/',self.login,name='login'),
路径('logout/',wrap(self.logout),name='logout'),
路径('password\u change/',wrap(self.password\u change,cacheable=True),name='password\u change'),
路径(
“密码更改/完成/”,
包装(self.password\u change\u done,cacheable=True),
name='password\u change\u done',
),
path('jsi18n/',wrap(self.i18n_javascript,cacheable=True),name='jsi18n'),
路径(
“r///”,
换行(contenttype_views.shortcut),
name='view''u on_site',
),
]

查看上面的代码,您只需在
reverse('admin:index')
的模板中使用
{%url'admin:index'%}
其他地方作为管理仪表板url。与所有其他管理员URL模式类似

我建议您安装
django_扩展
并使用其命令查找URL名称
python manage.py show_url
@rabbit.aaron您应该将此作为答案发布。此外,它还将帮助展示一个示例来说明该工具将如何回答我的问题。问题:中间的列是为该视图注册的函数的名称吗?如果是,我可以将此名称与
url
标记或
reverse()
一起使用吗?是的,您可以将名称与
reverse
一起使用。冒号指定一个命名空间,请看这里:我指的是中间的“列”中的名称,如<代码> django。(我在这里没有看到任何冒号。)例如,当我运行
/manage.py show_url
时,我看到一个路径,例如
/my_app/my_model//change/django.contrib.admin.options.change_view admin:myapp\u mymodel\u change
。要反转
admin:myapp\u mymodel\u change
路线,我必须硬编码应用程序名称和模型名称。我的问题是,是否有办法将这两个参数作为参数传递给
reverse()
(或
{%url%}
)。据我所知没有。当然,我可以用一些字符串格式轻松地构建自己的函数。我不认为Django提供了这样的功能。如果您查看一下
django.contrib.admin.options.ModelAdmin.get\u url
。您将看到URL是如何生成的。感谢您提供的信息。我最初的问题是关于应用程序中特定模型的管理路由,例如changeform视图。我链接到的问题显示了路线名称中包含应用程序和型号名称的示例。然而,我有一种情况,我想把它们作为参数传递。我的问题是如何做到这一点。
{% url "admin:auth_user_password_change" user.pk %}
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',
        ),
    ]