首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django中注册自定义过滤器

如何在Django中注册自定义过滤器
EN

Stack Overflow用户
提问于 2020-08-29 08:15:12
回答 2查看 1.7K关注 0票数 0

我想在Django中注册一个简单的过滤器,以便在一个模板中连接两个字符串。我在这里发现了很多关于这方面的问题,但似乎没有答案来解决我的问题。

settings.py

代码语言:javascript
复制
'MedAbrDirk.apps.MedabrdirkConfig',
'MedAbrDirk.templatetags',

MedAbrDirk/templatetags/my_tags.py

代码语言:javascript
复制
from django import template
register = template.Library()

@register.filter
def kette(arg1,arg2):
    return str(arg1) + str(arg2)

MedAbrDirk/templates/MedAbrDirk/base.html

代码语言:javascript
复制
 {% load my_tags %}
                <div class="container-fluid">
                        <div class="row">
                                <div class="col-sm-3 col-md-2 sidebar">
                                        <ul class="nav nav-sidebar">
                                                <li class="dropdown">
                                                        <a href="#" class="dropdown-toggle-menu" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Rechnungen<span class="caret"></span></a>
                                                        <ul class="dropdown-menu">
                                                                {{'test'|kette:'test2'}}
                                                                <li><a href="{% url app_var|kette:'eingabe' %}">Rechnung eingeben<span class="sr-only">(current)</span></a></li>

不过,在浏览器中我得到了:“无效筛选器:'kette'”

我不知道是什么原因造成的。我已经删除了pychache文件夹,我已经重新启动了我的美甲几次。

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2020-08-29 08:22:56

使用文档向装饰器注册自定义筛选器,您可以执行以下任一操作

代码语言:javascript
复制
# function name is taken as filter name
@register.filter
def kette(arg1, arg2):
    # code

代码语言:javascript
复制
# value in name argument is taken as filter name
@register.filter(name='kette')
def kette(arg1, arg2):
    # code

您可以在name中添加filter()参数,也可以从filter()中删除括号。

你说你有一个init.py文件。按顺序,python应该将其作为包__init__.py文件放在templatetags文件夹中。不是init.py

因此,在您的app文件夹中,您应该会看到这样的结构,用于定制模板标记:

代码语言:javascript
复制
MedAbrDirk/ #app folder
MedAbrDirk/templatetags/
MedAbrDirk/templatetags/__init__.py # should have double underscore on both the sides
MedAbrDirk/templatetags/my_tags.py
票数 0
EN

Stack Overflow用户

发布于 2020-08-29 10:31:48

谢谢你的帮助。看来我是偶然发现的。在另一个应用程序中,我也有一个带有文件my_tags.py的文件夹模板。我以为这些会由Django单独处理。显然,情况并非如此。

因此,在重命名模块之后,现在它可以工作了。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63644863

复制
相关文章

相似问题

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