Почему я не могу передать категории своему шаблону в Django - PullRequest
1 голос
/ 05 апреля 2020

У меня есть заголовок. html файл в моих каталогах в каталоге шаблонов. У меня есть раздел для категорий, которые мне нужно получить из базы данных. Поэтому я создал собственный тег шаблона в папке своего приложения. Я написал тег для последней выпадающей статьи и категорий. Ну, как-то статьи выбираются из базы данных, а категории - нет.

models.py

from django.db import models
from django.utils.text import slugify
from django.urls import reverse
from ckeditor_uploader.fields import RichTextUploadingField
from datetime import datetime

class Category(models.Model):
    label = models.CharField(max_length=15, unique=True)

    def __str__(self):
        return self.label


class Article(models.Model):
    title = models.CharField(max_length=80, unique=True, help_text='Max Length: 80')
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING)
    banner_image = models.ImageField(upload_to='photos/%Y/%m/%d/', help_text='Banner Image', default=None)
    description = models.TextField(max_length=200 ,help_text='Short descirption about the post')
    content = RichTextUploadingField(help_text='Site Content')
    published = models.BooleanField(default=True)
    date_created = models.DateTimeField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True)
    views = models.BigIntegerField(default=0)
    featured = models.BooleanField(default=False)

    def __str__(self):
       return self.title

    def get_absolute_url(self):
        return reverse('article', kwargs={'category': self.category, 'post': self.title})

мой пользовательский тег tempalte

from django import template
from articles.models import Article, Category

register = template.Library()
@register.inclusion_tag('partials/_header.html')
def recent():
    category = Category.objects.all() #not being fetched
    recents = Article.objects.filter(published=True).order_by('-date_created')[:9]
    trendings = Article.objects.filter(published=True).order_by('-views')[:9]

    return {
        'recents': recents,
        'trendings': trendings,
        'category': category, 
    }

** мой заголовок. html файл **

<div id="asmCategoryContents" class="asm-Category_Contents">
             {% for cat in category %}
                 <a href=""> {{ cat }}</a>
                            {% empty %}
                            <h2>Not found</h2>
                        {% endfor %}

                    </div>

Я использую MYSQL в качестве базы данных. Я запустил все миграции и создал ярлык для категорий, однако он всегда отображает «Не найдено» для категорий. Тем не менее, он хорошо работает для статей.

1 Ответ

1 голос
/ 05 апреля 2020

На самом деле вам не нужен тег шаблона. Вместо этого вам нужен пользовательский шаблон context processor. Вы можете написать так:

# filename your_app/context_processors/recent.py

from articles.models import Article, Category


def recent(request):
    category = Category.objects.all() #not being fetched
    recents = Article.objects.filter(published=True).order_by('-date_created')[:9]
    trendings = Article.objects.filter(published=True).order_by('-views')[:9]

    return {
        'recents': recents,
        'trendings': trendings,
        'category': category, 
    }

Затем добавьте его к context_processors вот так:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['./templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # rest of the context processors
                <b>'your_app.context_processors.recent',</b>

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