Категория Django не будет работать - PullRequest
0 голосов
/ 27 июня 2018

Я хочу перечислить все мои категории в шаблоне Django но я ничего не получаю, любая идея:

category_list: HTML

{% extends 'quickblog/base.html' %}
{% load readmore %}

{% block content %}
    {% for categories in categories %}
            <h1>{{ categories.titel }} {{ categories.post_set.count }}</h1>
            <p>{{ categories.description|readmore:15|linebreaksbr }}</p>
    {% endfor %}
{% endblock %}

«readmore» - это только шаблонный фильтр, игнорируйте его.

urls.py

url(r'^categories/$', TemplateView.as_view(template_name='quickblog/category_list.html'), name='categories'),

models.py

class Category(models.Model):
    title = EncryptedCharField(max_length=255, verbose_name="Title")
    description = EncryptedTextField(max_length=1000, null=True, blank=True)
    categorycover = fields.ImageField(upload_to='categorycovers/', blank=True, null=True, dependencies=[
        FileDependency(processor=ImageProcessor(
            format='JPEG', scale={'max_width': 350, 'max_height': 350}))
    ])
    categoryicon = fields.ImageField(upload_to='categoryicons/', blank=True, null=True, dependencies=[
        FileDependency(processor=ImageProcessor(
            format='JPEG', scale={'max_width': 16, 'max_height': 16}))
    ])

    class Meta:
        verbose_name = "Category"
        verbose_name_plural = "Categories"
        ordering = ['title']

    def __str__(self):
        return self.title

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Не используйте одинаковые имена переменных для

{% for categories in categories %}

Вы должны использовать

{% for category in categories %}

Где ваша переменная категории? Шаблон как просмотр вы загружаете только HTML, у вас нет загруженной переменной категории для использования, вы можете сделать 2 вещи ...

Пользовательские контекстные процессоры - Переменная, которую вы устанавливаете с помощью контекстных процессоров, будет доступна во всех ваших шаблонах, это обычно используется для проверки статистики пользователя без необходимости вручную делать это в ваших представлениях, в В вашем случае используйте это, только если вы хотите использовать переменные категорий на всех своих страницах

Объявите вашу функцию контекста

def foobar_processor(request):
    return Category.objects.all()

Загрузите его на свои settings.py

'OPTIONS': {
            'context_processors': [
                'foo.bar.processors.foobar_processor',
                ...,
            ],
         }

источник: https://www.webforefront.com/django/setupdjangocontextprocessors.html

Просмотры - Вы можете настроить один вид для своего URL в этом представлении, вы можете загрузить свой контекст и отправить его на свою HTML-страницу

from django.views.generic.base import TemplateView

from .models import Category

class HomePageView(TemplateView):

    template_name = "quickblog/category_list.html"

    def get_context_data(self, **kwargs):
        context = super(HomePageView, self).get_context_data(**kwargs)
        context['categories'] = Category.objects.all()
        return context

Источник: http://pythonclub.com.br/class-based-views-django.html

0 голосов
/ 27 июня 2018

Не переназначать categories в цикле. Используйте другое имя переменной.

{% for categories in categories %}

Вместо того, чтобы:

{% for category in categories %}

Также. Где вы определяете переменную контекста шаблона categories? По умолчанию универсальный ListView вставляет переменную контекста с именем object_list. TemplateView добавляет только переменные контекста, захваченные из шаблона url.

Я предлагаю вам создать подклассы представления ListView

from django.views.generic.list import ListView
from myapp.models import Category

class CategoryListView(ListView):

    model = Category
    template_name='quickblog/category_list.html'

шаблон:

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