NoReverseMatch в / blog / - Django по примерному списку кодов и проблеме с подробным представлением - PullRequest
0 голосов
/ 07 мая 2020

`Я работаю над кодом из главы 1 django на примере. Выполнил все инструкции и просмотрел множество отзывов на этом сайте и в других областях, но мне не повезло. Ранее я безуспешно пытался использовать get_absolute_url и вернуть обратный метод. Я пробовал проинструктированный подход и обнаружил точно такие же проблемы при просмотре списка и детальном просмотре. Я новичок, поэтому, наверное, упускаю что-то важное. Есть ли зависимость от версии. Я установил последние django и python. Нужен совет и спасибо за любую помощь! Это сообщение об ошибке

models.py

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

# Create your models here.
class PublishedManager(models.Manager):
    def get_queryset(self):

        return super().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_date')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    body = models.TextField()
    publish_date = models.DateTimeField(default=timezone.now)
    created_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(auto_now_add=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
    objects = models.Manager() # default Manager
    published = PublishedManager() # our custom manager

    class Meta:
        ordering = ['-publish_date',]

    def __str__(self):
        return self.title

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

views.py

from django .shortcuts import render, get_object_or_404 from. модели import Post

def post_list(request):
    posts = Post.published.all()
    return render(request, 'blog/post/post_list.html', {'posts':posts})

def post_detail(request, year, month, day, post):
    post = get_object_or_404(Post, slug=post,
                                    status='published',
                                    publish_date__year=year,
                                    publish_date__month=month,
                                    publish_date__day=day)

    return render(request, 'blog/post/post_detail.html',{'post':post})

urls.py (для приложения)

from django.urls import path
from . import views

app_name = 'blog'

urlpatterns = [
#post views
    path('', views.post_list, name='post_list'),
    path('<int:year>/<int:month>/<int=day>/<slug=post>/',
        views.post_detail,
        name='post_detail'),
]

admin.py

from django.contrib import admin

from .models import Post

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish_date', 'status')
    list_filter = ('status', 'created_date','publish_date', 'author')
    search_fields = ('title', 'body')
    prepopulated_fields = {'slug':('title',)}
    raw_id_fields = ('author',)
    date_hierarchy = 'publish_date'
    ordering = ('status', 'publish_date')

post_detail. html

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

{% block title %}{{post.title}}{% endblock %}

{% block content %}
<h> {{post.title}} </h>
  <p class="date">
    Published {{ post.publish_date }} by {{ post.author }}
  </p>
  {{ post.body|linebreaks }}
{%endblock%}

post_list. html

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

{% block title %}My Blog{% endblock %}

{% block content %}
  <h1>My Blog</h1>
  {% for post in posts %}
    <h2>
        <a href="{% url 'blog:post_list' post.title %}"
          {{ post.title }}
        </a>
    </h2>
    <p class="date">
        Published {{ post.publish_date }} by {{ post.author }}
    </p>
        {{ post.body|truncatewords:30|linebreaks }}
  {% endfor %}
{% endblock %}

Измененный post_list. html

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

{% block title %}My Blog{% endblock %}

{% block content %}
  <h1>My Blog</h1>
  {% for post in posts %}
    <h2>
          {% url 'blog:post_detail' post.publish_date.year post.publish_date.month post.publish_date.day post.publish_date.slug as post.title %}
          <a href="{{ post.title }}">
          {{ post.title }}
          </a>
    </h2>
    <p class="date">
        Published {{ post.publish_date }} by {{ post.author }}
    </p>
        {{ post.body|truncatewords:30|linebreaks }}
  {% endfor %}
{% endblock %}

1 Ответ

1 голос
/ 07 мая 2020

в вашем post_list. html

измените это

<a href="{% url 'blog:post_list' post.title %}"

на

<a href="{% url 'blog:post_list'%}"

ваш URL-адрес не принимает аргумент, но вы передаете аргумент из вашего шаблона.

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