早安全,
我已经做了一段时间的PHP程序员,但我觉得有必要更多地转向Python方向,而且比使用Django更好。
在这个过程中,我来到一个停止点,我知道有一个简单的解决方案,但我只是想念它 - 如何在Django模板中显示多种关系?
我的Django模型:(大多数字段已被删除)
class Category(models.Model):
name = models.CharField(max_length=125)
slug = models.SlugField()
categories = models.ManyToManyField(Category, blank=True, null=True)
class Recipe(models.Model):
title = models.CharField('Title', max_length=250)
slug = models.SlugField()
class Photo(models.Model):
recipe = models.ForeignKey(Recipe)
image = models.ImageField(upload_to="images/recipes", blank=True)
因此,我在我的应用程序中使用的基本模型称为“食谱” 话虽如此,我正在寻找两个问题的答案:
如果我进入Python shell并输入以下内容,我会得到一个结果:
>>> photos = Photo.objects.filter(recipe=1)
>>> photos
[<Photo: Awesome Pasta>]
>>> for photo in photos:
... print "Photo: %s" % photo.logo
...
Photo: images/recipes/2550298482_46729d51af__.jpg
但是当我在模板中尝试类似下面的内容时,我收到错误消息“无效的块标记:'photo.image'。”
{% for photo in photos %}
{% photo.image %}
{% endfor %}
虽然,即使这确实有效,但ID仍然硬编码到视图中,您将如何为每个配方创建动态?
详细信息页面View.py代码段:
def details(request, slug='0'):
p = get_object_or_404(Recipe, slug=slug)
photos = Photo.objects.filter(recipe=1)
return render_to_response('recipes/recipes_detail.html', {'p': p, 'photos': photos})
提前感谢您对所有人的帮助和理解,这可能是一个非常简单的问题!
更新:删除模型中的其他字段时,我忘记了食谱模型的类别字段。
答案 0 :(得分:3)
从我所看到的,我认为你有一个小的语法错误:
{% photo.image %}
应改为:
{{ photo.image }}
{% %}
表示法用于django模板标记。另一方面,变量用{{ }}
表示法表示。
要使其动态化,您可以利用Photo
模型具有Recipe
的外键这一事实。这意味着从使用slug加载的Recipe
实例到照片集会有一个反向关系:
def details(request, slug='0'):
p = get_object_or_404(Recipe, slug=slug)
photos = p.photo_set.all()
希望这对您有用。很高兴看到你喜欢和Django一起工作!