Django模板,if标签基于当前URL值

lp0sw83n  于 2022-12-14  发布在  Go
关注(0)|答案(4)|浏览(153)

我希望能够根据当前的URL值做一个if标记。
例如,如果当前页面的url是accounts/login/,则不显示链接,而不从视图传递变量。
我不确定如何为此编写{% if %}标记,这可能吗?

fd3cxomn

fd3cxomn1#

您也可以使用以下方法为动态URL执行此操作:

{% url 'show_user_page' user=user as the_url %}
{% if request.get_full_path == the_url %}something{% endif %}

其中您的urls.py包含类似以下内容:

(r'^myapp/user/(?P<user>\d+)/$', 'show_user_page'),

我知道这一点,因为我刚刚花了很长时间起草一个stackoverflow问题,当我在文档中找到答案。
我想说,即使在简单的情况下,这也可能是更好的方法,因为它的耦合更松散。

whlutmcx

whlutmcx2#

如果将“request”对象传递给模板,则可以使用以下方法:

{% if request.get_full_path == "/account/login/" %}
9cbw7uwe

9cbw7uwe3#

对于动态url,还可以使用request.resolver_match属性(docs):
HttpRequest.resolver_match
ResolverMatch的一个示例,表示解析的URL。此属性仅在URL解析发生后设置,这意味着它在所有视图中可用,但在URL解析发生前执行的中间件中不可用(但您可以在process_view()中使用它)。
返回的ResolverMatch对象有许多有用的属性,例如view_name属性,它返回的名称与您传递给url模板标记以生成当前url的名称相同。
view_name
与URL匹配的视图的名称,包括命名空间(如果有)。
有关此属性和其他属性的信息,请参阅文档。
将此应用于@nimasmi的回答中的示例,您将得到:

{% if request.resolver_match.view_name == 'show_user_page' %}something{% endif %}

其中您的urls.py包含如下内容:

(r'^myapp/user/(?P<user>\d+)/$', 'show_user_page'),

请注意,当您使用URL命名空间时,view_name将返回命名空间限定的url/视图名称,例如app:urlname
与@nimasmi给出的答案相比,这稍微简化了模板代码,因为不需要单独的{% url %}标记来生成要比较的url。当您不需要比较视图参数,而只需要比较视图名称时,这一点尤其正确。如果您确实需要比较url中的参数,您可以轻松地使用ResolverMatch.argskwargs属性。

gg58donl

gg58donl4#

if "order" in request.path使用“in”可以匹配如下URL:客户、客户、客户/新建、客户/编辑等
第一个问题

相关问题