要解决这个问题,我真是碰壁了。我有一个包含在其他模板中的模板,但无法在包含的模板中呈现任何模板变量。对于包含的模板,我有一个单独的模板标记文件。我现在完全不知道如何解决这个问题。你知道吗
我想能够从我的模型在模板中呈现字段值(包括一个图像,一个简短的描述,等等),我很肯定我是用错误的方式去做这件事。你知道吗
下面是我的代码:
模型:
class AddOnItem(models.Model):
base_product = models.ForeignKey(Product)
base_price = models.DecimalField(max_digits=8, decimal_places=2, default=0.0)
addon_image = models.ImageField(upload_to='uploads/shop/product/images/',
default='uploads/shop/product/images/', help_text='Max width: 450px')
short_description = models.CharField(max_length=255, blank=True)
def __unicode__(self):
return self.base_product.name
模板:
{% load addon_tags %}
{% if items_to_add %}
{% for items in items_to_add %}
<div id="addon-container">
<div id="left-addon" class="addon-container">
<a href=""><img src="#" class="addon-image"></a>
<p class="addon-description">{{items.short_description}}</p>
</div>
</div>
{% endfor %}
{% endif %}
插件_标签.py地址:
from django import template
from sho.models import AddOnItem
register = template.Library()
@register.inclusion_tag("foo/templates/v/sho/addon.html", takes_context=True)
def add_on_render():
context['items_to_add'] = AddOnItem()
return context
我想我要么做错了很多(我目前的假设),要么遗漏了一些小细节。我已经为此工作了好几天,并且反复检查了文档。我只是完全错过了一些东西,这已经成为我的主要障碍。任何帮助都将不胜感激。你知道吗
Django版本1.4
编辑: 我最终重写了视图并删除了templatetag。感谢Daniel Roseman和Odif Yltsaeb的回复。你知道吗
如果设置“takes\u context=True”,则应将context作为修饰函数中的第一个参数:
1)从您的帖子中,您正在向add\on\u render templateag的上下文中添加空的新项。你知道吗
2)我在你的帖子里看不到你在用{%add\u on\u render%}templatetag。您已经创建了templattag,但似乎没有在任何地方使用它。你知道吗
很难理解你到底想做什么,或者为什么需要templatetag。你知道吗
如果你想显示models字段值,你不需要templateag,所有你在这篇文章的“模板”部分显示的东西,都可以很好地在你的主模板中显示,我假设,没有在你的文章中显示。你知道吗
如果您想使用templatetag,那么这个templatetag应该接收AddOnItem istance作为如下参数:
你可以在这样的模板中使用它:
还有你的foo/templates/v/sho/加载项.html 希望这样:
但是这样做似乎是非常不必要的,因为不使用templatag,就可以通过使用已经存在于“main”模板之外的模板代码来实现所有这些。你知道吗
您尚未发布试图在中包含标记的模板。我怀疑您根本没有调用它,因为如果您尝试使用标记,会有一些错误导致异常。您需要在主模板的某个地方执行
{% add_on_render %}
。你知道吗正如我所说,虽然有几个错误。首先,在添加
items_to_add
键之前,不要定义context
(作为空dict)。你只需一次就可以走捷径。你知道吗其次,你已经把
items_to_add
变成了一个单一的、空白的addonime。因此,在包含的模板中,遍历items_to_add
什么都不做。不知道你想在那里做什么。也许您想传递所有addonim实例?你知道吗或者,您可能希望通过某些条件对它们进行筛选,在这种情况下,您可能希望将这些条件传递给包含标记本身:
您可以从主模板调用它,如下所示:
相关问题 更多 >
编程相关推荐