“filters”不是一个已注册的标签库。

4
我有一个关于模板过滤器的问题。我使用了Django allauth来进行用户注册。我编辑了它的signup.html并使用循环来迭代字段以动态显示它们。我能够显示这些字段,但是无法定义类型字段。
我的做法是: account/signup.html
{% load filters %}
<form class="signup" id="signup_form" method="post" action="{% url 'account_signup' %}">
    {% csrf_token %}
    {% for field in forms.visible_fields %}
        <input type="{{ field.field.widget|input_type}}" name="{{ field.name }}" id="{{ field.id_for_label}}" class="form-control">
    {% endfor %}
</form>

主应用程序(filters.py)中的模板过滤器
from django import template
register = template.Library()

@register.filter('input_type')
def input_type(ob):
    return ob.__class__.__name__

templates location

'DIRS': [os.path.join(BASE_DIR, 'templates')

我正在使用Django allauth,我的模板过滤器代码应该放在哪里?扩展allauth表单以使用名字和姓氏的注册表单位于主应用程序中。
2个回答

4
标签库应放置在应用的根目录下的templatetags目录中:
请参阅文档中的代码布局:(链接) 当一个 Django 应用被添加到 INSTALLED_APPS 中时,任何标签都会自动加载到模板中。
应用程序应包含一个与models.pyviews.py等同级别的templatetags目录。如果这个目录不存在,请创建它-不要忘记__init__.py文件以确保该目录被视为 Python 包。

是的,我是这样做的,但我不确定应该把我的templatetags目录放在哪里。因为我正在使用allauth包进行用户注册。但我的注册表单在主应用程序中,这意味着我必须将其放在主应用程序中。我会尝试一下。 - milan
我仍然得到相同的错误。我创建了一个名为templatetags的文件夹,在其中创建了两个文件,一个是__init__.py,另一个是filters.py,其中包含上述代码。然后我使用{% load filters %}将过滤器加载到account/signup.html中,因为filters.py是名称,然后在type字段内部执行{{ field.field.widget|input_type }},但我仍然得到相同的错误。 - milan
我的项目结构是myproject > main_app,myproject,templates(这里存放Django allauth模板的account/signup.html)。我将templatetags放在main_app中。 - milan
main_app是一个app吗?并且它是否被包含在INSTALLED_APPS中? - Moses Koledoye
是的,它是一个应用程序。同时也包含在INSTALLED_APPS中。 - milan
显示剩余5条评论

0

这个对我解决了错误。我将它添加到了init.py中。

import pymysql

pymysql.install_as_MySQLdb()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接