Django ManyToMany模板问题

时间:2009-08-05 14:42:14

标签: python django templates django-templates many-to-many

早安全,

我已经做了一段时间的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)

因此,我在我的应用程序中使用的基本模型称为“食谱” 话虽如此,我正在寻找两个问题的答案:

  1. 我如何在其详细信息页面上显示配方的类别?
  2. 我如何在其详细信息页面上显示配方图像?
  3. 如果我进入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})
    

    提前感谢您对所有人的帮助和理解,这可能是一个非常简单的问题!

    更新:删除模型中的其他字段时,我忘记了食谱模型的类别字段。

1 个答案:

答案 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一起工作!