我尝试在django中注册我的自定义模板标签库,但不幸的是它无法正常工作!
我想创建一个自定义包含标签,并按照以下说明进行操作:https : //docs.djangoproject.com/en/1.11/howto/custom-template-tags/#howto-custom-template-tags-inclusion-tags
我创建了一个名为“ tag_lib”的应用程序(安装在settings.py中),用于放置模板标签。在app文件夹中有一个名为“ templatetags”的字典,其中包含一个空字符__init__.py和my my_tags.py。
my_tags.py 包含:
from django import template
register = template.Library()
@register.inclusion_tag(filename='navbar.html', takes_context=True)
def navbar_context(context):
return {
'some_var': context['some_var'],
}
Run Code Online (Sandbox Code Playgroud)
当我重新启动devserver并尝试使用
{% load my_tags %} `
Run Code Online (Sandbox Code Playgroud)
在模板中,出现错误:
TemplateSyntaxError at /
'my_tags' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_static
admin_urls
cache
i18n
l10n
log
static
staticfiles
tz
Run Code Online (Sandbox Code Playgroud)
知道我犯错了吗?
谢谢。
我有一个在很多领域使用外键的模型:
class DefinitionTag(models.Model):
tag = models.CharField(max_length=50, default="Tag")
def __str__(self):
return self.tag
class Definition(models.Model):
name = models.CharField(max_length=100)
definition = models.CharField(max_length=1000)
fundstellen = models.CharField(max_length=300, blank=True)
wissenswertes = models.CharField(max_length=1000, blank=True)
tags = models.ManyToManyField(DefinitionTag)
def __str__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
这工作,并在管理员一切都设置好所以我可以使用它.问题是,如果我尝试使用代码在我的视图中显示包含数据库条目的表:
def home(request):
query_results = Definition.objects.all()
context = {
"query_results": query_results
}
return render(request, 'home.html', context)
Run Code Online (Sandbox Code Playgroud)
并在HTML中:
{% for item in query_results %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.definition }}</td>
<td>{{ item.fundstellen }}</td>
<td>{{ item.wissenswertes }}</td>
<td>{{ item.tags }}</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
在标签栏中,它只给我:
DefinitionTag.None
如何在manytomany字段中显示所有标签? …