首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django覆盖默认templatetags

Django覆盖默认templatetags
EN

Stack Overflow用户
提问于 2018-08-06 17:59:22
回答 2查看 390关注 0票数 0

如果找不到反向匹配,我想让{% url%}静默失败,只输出一个简单的'#‘或默认主页链接。

如果不将{% load tags %}添加到我的100多个HTML中,我如何才能做到这一点?有点像猴子的补丁,但要做好生产准备。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-06 19:24:19

这应该会起作用,在任何应用程序中创建一个名为'builtins.py‘的文件,如下所示

代码语言:javascript
运行
复制
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文件中

代码语言:javascript
运行
复制
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的位置

票数 3
EN

Stack Overflow用户

发布于 2018-08-06 18:33:33

正如评论中所述,这不是您通常想要做的事情。但是,一种方法是使用变量:

代码语言:javascript
运行
复制
{% url "some:url" as the_url %}
{{ the_url|default:"#"}}

这也可以写在一行上:

代码语言:javascript
运行
复制
<a href="{% url "some:url" as the_url %}{{ the_url|default:"#"}}">...</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51705004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档