2016-09-19 40 views
0

我遇到有关模板过滤器的问题。我已经使用django allauth进行用户注册。我编辑了它的signup.html和使用循环遍历字段以动态显示它们。我可以显示字段但不能定义类型字段。“过滤器”不是已注册的标签库

我所做的是

帐户/ 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__ 

模板位置

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

因为我使用django allauth我应该在哪里放置我的模板过滤代码?使用名字和姓氏在主应用程序内部注册表单以扩展allauth表单。

回答

2

标记库应放置在一templatetags目录中的应用程序的根目录:

见代码布局从docs

当添加一个Django应用INSTALLED_APPS,任何标签它在 中定义了下面描述的常规位置,自动使 可用于在模板中加载。

的应用程序应该包含一个templatetags目录,在同级别的 models.pyviews.py,等等。如果这不存在,创建它 - 不要忘记__init__.py文件,以确保该目录将被视为 作为Python包。

+0

是的,我这样做,但我不知道我应该在哪里放置我的templatetags目录。因为我使用allauth包进行用户注册。但是我的注册表单在主应用程序中意味着我必须将其放入主应用程序中。我对吗?我会试试这个。 – milan

+0

“templatetags”目录的位置与注册表格的位置无关 –

+0

我仍然收到相同的错误。我创建了一个名为templatetags的文件夹,其中我创建了两个文件一个__init__.py和另一个filters.py与上面的代码。然后我使用{%load filters%}作为filters.py加载了帐户/ signup.html中的过滤器,然后在{{field.field.widget | input_type}}}类型字段中填写了过滤器,但仍然得到同样的错误 – milan

相关问题