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',
),
]