如果找不到反向匹配项,我想使{%url%}静默失败,只输出简单的“#”或默认首页链接。
如何在不将int amount = System.Convert.ToInt32(value);
添加到我的数百个HTML中的情况下完成此操作?有点像猴子打补丁,但已经可以投入生产了。
答案 0 :(得分:1)
这应该有效, 在任何看起来像这样的应用程序中创建一个名为“ builtins.py”的文件
from django import template
from django.template.defaulttags import url
from django.urls.exceptions import NoReverseMatch
register = template.Library()
def decorator(func):
def wrap(*args, **kwargs):
try:
return func(*args, **kwargs)
except NoReverseMatch:
return '#'
return wrap
@register.tag(name='url')
def custom_url(parser, tokens):
url_node = url(parser, tokens)
url_node.render = decorator(url_node.render)
return url_node
以及您的settings.py
文件
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'builtins': ['app_name.builtins'], # <-- Here
},
},
]
app_name是您创建builtins.py
答案 1 :(得分:0)
正如评论中所述,这通常不是您要执行的操作。但是,一种方法是使用变量:
{% url "some:url" as the_url %}
{{ the_url|default:"#"}}
这也可以写在一行上:
<a href="{% url "some:url" as the_url %}{{ the_url|default:"#"}}">...</a>