Джанго Шаблон логики - PullRequest
       1

Джанго Шаблон логики

1 голос
/ 10 августа 2011

Так что я только сейчас вступаю в борьбу с Джанго,

Я хочу что-то относительно прямолинейное. У меня модель такая:

class Article(models.Model):
    id = models.IntegerField(primary_key=True)
    volnumber = models.IntegerField(db_column='volNumber')
    title = models.TextField()
    keywords = models.TextField(blank=True)
    start_page = models.IntegerField(null=True, blank=True)
    end_page = models.IntegerField(null=True, blank=True)
    author_1 = models.TextField(blank=True)
    author_2 = models.TextField(blank=True)
    author_3 = models.TextField(blank=True)
    author_4 = models.TextField(blank=True)
    author_5 = models.TextField(blank=True)
    author_6 = models.TextField(blank=True)
    author_7 = models.TextField(blank=True)
    author_8 = models.TextField(blank=True)
    author_9 = models.TextField(blank=True)
    author_10 = models.TextField(blank=True)

на мой взгляд:

def index(request):
    article_list = Article.objects.all()
    volume_list = Volume.objects.all()
    auth_list = ['author_1', 'author_2', 'author_3', 'author_4', 'author_5', 'author_6', 'author_7', 'author_8', 'author_9', 'author_10', ]

    return render_to_response('index.html', {
            'article_list': article_list,
            'volume_list': volume_list,
            'auth_list' : auth_list,
    })

и я хочу перебрать авторов первых статей, а также исключить пустые записи для списка в шаблоне:

<ul class="articleList">
    {% for article in article_list %}
        <li>
        {% for author in auth_list %}
            <i>{{ article."author" }}</i>
        {% endfor %}

        {{ article.title }}{{ article }}
        </li>
    {% endfor %}
 </ul>

очевидно, что это не работает, и я не уверен, что шаблон является местом для этой логики, но я надеюсь, из этого ясно, чего я пытаюсь достичь.

Любая помощь очень ценится.

Ответы [ 3 ]

7 голосов
/ 10 августа 2011

Я не уверен, что вы хотите составить список авторов таким образом. Если вам нужно несколько авторов, рассмотрите возможность использования новой модели для автора, а затем используйте ManyToManyField в своем классе Article для ссылки статей на авторов. Затем вы можете просмотреть авторов в вашем шаблоне следующим образом:

{% for author in article.authors.all %}
    <!-- blah blah -->
{% endfor %}

Вот авторская модель:

class Author(models.Model):
    first_name = models.TextField(...) # don't copy to ..., put whatever params you need
    last_name = models.TextField(...)

и настраиваемая модель Артикул:

class Article(models.Model):
    # add this line
    authors = models.ManyToManyField(Author)

Теперь вам не нужно возвращать auth_list в вашем коде просмотра.

0 голосов
/ 10 августа 2011

Основываясь на том, что уже было сказано, имеет смысл изменить вашу модель, но если вы хотите оставить ее как есть и отобразить список только заполненных авторских полей, вы можете сделать это в шаблоне:

<ul class="articleList">
    {% for article in article_list %}
        <li>
        {% for author in auth_list %}
            {% if author %}
            <i>{{ author }}</i>
            {% endif %}
        {% endfor %}

        {{ article.title }}{{ article }}
        </li>
    {% endfor %}
 </ul>
0 голосов
/ 10 августа 2011

Если вы не хотите менять свою модель данных (хотя я настоятельно советую вам следовать предложению @ andrew-lee), вам не разрешено использовать атрибуты по имени в шаблонах.Вы должны сделать:

# in the view
return render_to_response('index.html', {
        'article_list': article_list,
        'volume_list': volume_list,
        'auth_list' : [getattr(article, name) for name in auth_list],
})

# in the template
    {% for author in auth_list %}
        <i>{{ author }}</i>
    {% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...