python-Django ManyToMany模板问题

大家早上好,

我担任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合作!

上一篇:JetBrains软件(Idea、Pycharm等)模板设置


下一篇:E、打开EXCEL文件时,总是出现“禁用宏,关闭”解决方案