首页 > 解决方案 > Django 动态 url 参数名称

问题描述

基本上试图做

    {%  url dynamic_url_name dynamic_parameter_name=dynamic_parameter_value %}

尝试了最简单的方法

<a href="{% url belongs_to belongs_to_url_arg=entry|getattribute:belongs_to_url_arg_value %}">{{entry}}</a>
    {% include 'mainsite/children/title_template.html' with
        the_title=title_text
        is_title_page=True
        entries_of="title"
        belongs_to="profile"
        belongs_to_url_arg="user"
        belongs_to_url_arg_value="author"
    %}

但不幸的是,这导致了彻底失败在此处输入图像描述

从这里我可以看出参数不能是上下文变量,所以接下来我可以尝试简单地解压缩字典,就像我在 python 中使用类似

{% url **{dynamic_parameter_name:dynamic_parameter_value} %}

但我不知道在 django 模板中是否有可能,如果可能的话如何?


我的网址看起来像

re_path(r'^title/(?P<title_text>[a-zA-Z0-9-]+)/$', TitlePage.as_view(), name='title')
re_path(r'^user/(?P<user>[a-zA-Z0-9-]+)/$', ProfilePage.as_view() ,name='profile')

我的 url 是由上下文变量或在包含标记中选择的,因此它是一个变量。

{% url url_variable xxx=value %}

现在,url_variable 已经是 django 的一部分,url 标签接受变量作为它的第一个参数。但在这种特殊情况下xxx, 并不总是相同的,而是根据 变化url_variable;如果url_variable是标题,我想xxx成为title_text,如果是个人资料,我想成为user。参数名称保存在 中belongs_to,所以如果这是一个常规的 python 函数,我可以简单地完成

url(url_variable, **{belongs_to: value})

它会用正确的参数名称解​​压它。所以我需要在模板处理器中对此进行某种等效

标签: pythondjangopython-3.xdjango-templates

解决方案


我认为你把事情复杂化了。您自己还没有展示您的观点,但我不明白为什么他们不能都采用一个通用命名的参数 - 比如说param- 来完成特定的工作。所以 URL 可能是:

re_path(r'^title/(?P<param>[a-zA-Z0-9-]+)/$', TitlePage.as_view(), name='title')
re_path(r'^user/(?P<param>[a-zA-Z0-9-]+)/$', ProfilePage.as_view() ,name='profile')

现在你可以做

{% url dynamic_url_name param=dynamic_parameter_value %}

推荐阅读