我希望能够根据当前的URL值做一个if标记。例如,如果当前页面的url是accounts/login/,则不显示链接,而不从视图传递变量。我不确定如何为此编写{% if %}标记,这可能吗?
accounts/login/
{% if %}
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问题,当我在文档中找到答案。我想说,即使在简单的情况下,这也可能是更好的方法,因为它的耦合更松散。
whlutmcx2#
如果将“request”对象传递给模板,则可以使用以下方法:
{% if request.get_full_path == "/account/login/" %}
9cbw7uwe3#
对于动态url,还可以使用request.resolver_match属性(docs):HttpRequest.resolver_matchResolverMatch的一个示例,表示解析的URL。此属性仅在URL解析发生后设置,这意味着它在所有视图中可用,但在URL解析发生前执行的中间件中不可用(但您可以在process_view()中使用它)。返回的ResolverMatch对象有许多有用的属性,例如view_name属性,它返回的名称与您传递给url模板标记以生成当前url的名称相同。view_name与URL匹配的视图的名称,包括命名空间(如果有)。有关此属性和其他属性的信息,请参阅文档。将此应用于@nimasmi的回答中的示例,您将得到:
request.resolver_match
HttpRequest.resolver_match
ResolverMatch
view_name
url
{% if request.resolver_match.view_name == 'show_user_page' %}something{% endif %}
其中您的urls.py包含如下内容:
请注意,当您使用URL命名空间时,view_name将返回命名空间限定的url/视图名称,例如app:urlname。与@nimasmi给出的答案相比,这稍微简化了模板代码,因为不需要单独的{% url %}标记来生成要比较的url。当您不需要比较视图参数,而只需要比较视图名称时,这一点尤其正确。如果您确实需要比较url中的参数,您可以轻松地使用ResolverMatch.args和kwargs属性。
app:urlname
{% url %}
ResolverMatch.args
kwargs
gg58donl4#
if "order" in request.path使用“in”可以匹配如下URL:客户、客户、客户/新建、客户/编辑等第一个问题
if "order" in request.path
4条答案
按热度按时间fd3cxomn1#
您也可以使用以下方法为动态URL执行此操作:
其中您的urls.py包含类似以下内容:
我知道这一点,因为我刚刚花了很长时间起草一个stackoverflow问题,当我在文档中找到答案。
我想说,即使在简单的情况下,这也可能是更好的方法,因为它的耦合更松散。
whlutmcx2#
如果将“request”对象传递给模板,则可以使用以下方法:
9cbw7uwe3#
对于动态url,还可以使用
request.resolver_match
属性(docs):HttpRequest.resolver_match
ResolverMatch的一个示例,表示解析的URL。此属性仅在URL解析发生后设置,这意味着它在所有视图中可用,但在URL解析发生前执行的中间件中不可用(但您可以在process_view()中使用它)。
返回的
ResolverMatch
对象有许多有用的属性,例如view_name
属性,它返回的名称与您传递给url
模板标记以生成当前url的名称相同。view_name
与URL匹配的视图的名称,包括命名空间(如果有)。
有关此属性和其他属性的信息,请参阅文档。
将此应用于@nimasmi的回答中的示例,您将得到:
其中您的urls.py包含如下内容:
请注意,当您使用URL命名空间时,
view_name
将返回命名空间限定的url/视图名称,例如app:urlname
。与@nimasmi给出的答案相比,这稍微简化了模板代码,因为不需要单独的
{% url %}
标记来生成要比较的url。当您不需要比较视图参数,而只需要比较视图名称时,这一点尤其正确。如果您确实需要比较url中的参数,您可以轻松地使用ResolverMatch.args
和kwargs
属性。gg58donl4#
if "order" in request.path
使用“in”可以匹配如下URL:客户、客户、客户/新建、客户/编辑等第一个问题