Как я могу отобразить функцию «Теги», реализованную из моего views.py в шаблон в DJANGO? - PullRequest
0 голосов
/ 24 июня 2019

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

Я не знаю, что делать, прошло несколько дней.

models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
from taggit.managers import TaggableManager

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super(PublishedManager, self).get_queryset().filter(status='published')

class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'draft'),
        ('published', 'published')
    )

    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(User, on_delete='models.CASCADE', related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    objects = models.Manager()

    published = PublishedManager()

    tags = TaggableManager()

    class Meta:
        ordering = ('-publish',)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('core:post_detail', args=[self.publish.year,self.publish.month,self.publish.day,self.slug])

views.py

from django.shortcuts import render, get_object_or_404
from .models import (
    Post,
    Comment
)

from django.core.paginator import (
    Paginator, 
    EmptyPage,
    PageNotAnInteger
)

from django.views.generic import (
    ListView,
)

from .forms import (
    EmailPostForm,
    CommentForm
)

from django.core.mail import send_mail
from taggit.models import Tag



def post_list(request, tag_slug=None):
    """
    Tags also included.
    """
    page_posts = Post.published.all()

    # Tags
    tag = None

    if tag_slug:
        tag = get_object_or_404(Tag, slug=tag_slug)
        page_posts = page_posts.filter(tags__in=[tag])


    paginator = Paginator(page_posts, 2)
    page = request.GET.get('page')
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)

    context = {
            'page':page,
            'posts':posts,
            'tag': tag
    }

    breakpoint()
    return render(request, 'core/list.html', context)   

urls.py

from django.contrib import admin
from django.urls import path, include
from . import views

app_name = 'core'
urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('tag/<slug:tag/>', views.post_list, name='post_list_by_tag'), 
    path('<int:year>/<int:month>/<int:day>/<slug:post>/', views.post_detail, name='post_detail'),
    path('<int:post_id>/share/', views.post_share, name='post_share')
]

html - list.html

{% extends "core/base.html" %}

  {% block title %}Home{% endblock title %}


  {% block content %}
    <div class="container mt-5"></>
      <h1>Blogus</h1>
      </br>


      {{ posts.tag.all }}
      <!-- tags -->


        {% for tag in post.tags.all %}
          <a href="{% url 'core:post_list_by_tag' tag.slug %}">
            {{ tag.name }}
          </a>
          {% if not forloop.last %}, {% endif %}
        {% endfor %}


      {% if tag %}
        <h2>Posts tagged with "{{ tag.name }}"</h2>
      {% endif %}

      {% for post in posts %}
        <a href='{{ post.get_absolute_url }}'><b>{{ post.title }}</b></br></br></a>
        <p class="date">
          Published on <b>{{ post.publish }}</b> by <b>{{ post.author }}</b>
        </p>
        {{ post.body|truncatewords:30|linebreaks}}</br>
      {% endfor %}

      {% include "core/pagination.html" with page=posts %}

    </div>



  {% endblock content %}

Любая помощь будет высоко ценится. Я застрял на несколько дней.

...