是否可以在模板中检查某个网址与网址中的任何模式匹配?
答案 0 :(得分:7)
您可以使用url标记的“as”形式来检查命名的URL是否存在。
{% url path.to.view as the_url %}
{% if the_url %}
<a href="{{ the_url }}">Link to optional stuff</a>
{% endif %}
当使用“as”时,它不会引发异常。
答案 1 :(得分:6)
这是您通常希望在views.py文件中执行的操作,其中reverse()帮助程序用于具有已知args的命名URL或用于路径的resolve()。
如果您确实需要特定模板中的此功能,这是一个hacky解决方案:
@register.simple_tag
def urlpath_exists(name):
"""Returns True for successful resolves()'s."""
try:
return bool(resolve(path))
except Resolver404:
return False
注意:这并不保证网址有效,只是模式匹配。
答案 2 :(得分:1)
假设您的项目名称是虚拟的。然后,
from dummy.urls import urlpatterns
def find_url(url):
for e in urlpatterns:
if e.regex.match(url):
print 'found!' #or do whatever you want
return #then exit the procedure.
print 'not found!'
答案 3 :(得分:0)
我认为没有简单的方法可以做到这一点。所以我写了一个简单的模板标签,它接受url名称并为它调用reverse方法并将反向放入try..except:
try:
result = reverse(url)
except:
result = None
return result