大家早上好,
我担任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})
在此先感谢您的帮助和理解,这可能对大家来说是一个非常简单的问题!
更新:删除模型中的其他字段时,我忘记了配方模型的类别字段.
解决方法:
从我所看到的,我认为您有一个小的语法错误:
{% photo.image %}
相反,应为:
{{ photo.image }}
{%%}表示法用于Django模板标签.另一方面,变量用{{}}表示法表示.
要使其动态化,您可以利用照片模型具有配方的外键这一事实.这意味着从您使用子弹加载的Recipe实例到照片集之间存在反向关系:
def details(request, slug='0'):
p = get_object_or_404(Recipe, slug=slug)
photos = p.photo_set.all()
希望这对您有用.很高兴看到您喜欢与Django合作!