Django Вопросы к шаблону ManyToMany - PullRequest
3 голосов
/ 05 августа 2009

Доброе утро всем,

Я довольно давно программист на 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. Как бы я показал изображение рецепта на странице с подробностями?

Если я зайду в оболочку Python и введу следующее, я получу результат:

>>> 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 %}

Хотя, даже если это сработало, идентификатор все еще жестко закодирован в виде, как бы вы использовали эту динамику для каждого рецепта?

Подробная информация о странице. Фрагмент кода:

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 Ответ

3 голосов
/ 05 августа 2009

Из того, что я вижу, я думаю, что у вас есть небольшая синтаксическая ошибка:

{% photo.image %}

вместо этого должно быть:

{{ photo.image }}

Обозначение {% %} используется для тегов шаблонов django. Переменные, с другой стороны, выражаются с помощью нотации {{ }}.

Чтобы сделать его динамичным, вы можете использовать тот факт, что ваша модель Photo имеет внешний ключ для Recipe. Это означает, что будет существовать обратное отношение от экземпляра Recipe, который вы загрузили с помощью пули, к набору фотографий:

def details(request, slug='0'):
    p = get_object_or_404(Recipe, slug=slug)
    photos = p.photo_set.all()

Надеюсь, это сработает для вас. Рад видеть, что вам нравится работать с Джанго!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...