Проблема с перенаправлением на различные сообщения в блоге по клику в django - PullRequest
0 голосов
/ 07 февраля 2019

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

NoReverseMatch at /
Reverse for 'article' with arguments '('',)' not found. 1 pattern(s) tried: ['(?P<article_id>[0-9]+)$']

Это содержимое urls.py в приложении страниц, которое я создал.

from django.urls import path
from . import views

urlpatterns=[

    path('',views.index,name='index'),
    path('<int:article_id>',views.article,name='article'),
    path('about',views.about,name='about'),

]

Это мои views.py

from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse
from . models import Post
# Create your views here.
def index(request):
    post=Post.objects.all()

    context = {
        'post' : post
    }

    return render(request,'pages/index.html',context)

def article(request,article_id):

    article=get_object_or_404(Post,pk=article_id)

    context = {
        'article' : article
    }
    return render(request,'pages/article.html',context)


def about(request):
    return render(request,'pages/about.html')

Как вы, наверное, видите, я имею в виду содержание статей через article_id и данные, относящиеся к конкретному сообщению.* Извлекается из базы данных.

Это мой index.html, который должен перенаправлять содержимое определенного сообщения при клике.

    {%extends 'base.html'%}
    {%load static%}
    {%block content%}

    <!-- Page Header -->
    <header class="masthead" style="background-image: url({% static 'img/home-bg.jpg' %})">
      <div class="overlay"></div>
      <div class="container">
        <div class="row">
          <div class="col-lg-8 col-md-10 mx-auto">
            <div class="site-heading">
              <h1>Clean Blog</h1>
              <span class="subheading">A Blog Theme by Start Bootstrap</span>
            </div>
          </div>
        </div>
      </div>
    </header>

<!-- Posts -->

    {% if post %}
      {% for posts in post %}
        <div class="container">
          <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
              <div class="post-preview">
                <a href="{% url 'article' article.id%}">
                  <h2 class="post-title">
                    {{posts.title}}
                  </h2>
                  {%if posts.subtitle%}
                    <h3 class="post-subtitle">
                      {{posts.subtitle}} 
                    </h3>
                  {%endif%}
                </a>
                <p class="post-meta">Posted by
                  <a href="#">{{posts.postby}}</a>
                  on {{posts.date}}</p>
              </div>
              <hr>
            </div>
          </div>
        </div>


      {% endfor %}
    {%endif%}       
            <!-- Pager -->
          <div class="container">
            <div class="row">
              <div class="col-lg-8 col-md-10 mx-auto">
                <div class="clearfix">
                  <a class="btn btn-primary float-right" href="#">Older Posts &rarr;</a>
                </div>
              </div>
            </div>
          </div>

      <hr>
    {%endblock%} 

Однако я получаю требуемыйстраницу, когда я набираю localhost: 8000/1 или localhost: 8000/2 вручную, как я хочу.Но проблема в том, что он не перенаправляет на клик.Мое лучшее предположение - то, что это

<a href="{% url 'article' article.id%}">

создает проблему.

Все предложения приветствуются !.Спасибо.

1 Ответ

0 голосов
/ 07 февраля 2019

У вас нет ничего под названием "статья" в этом шаблоне.Ваш объект называется "сообщения".Итак:

<a href="{% url 'article' posts.id %}">

(оставим в стороне вопрос о том, почему вы называете свою коллекцию постов «постом», а каждый отдельный пост - «постом» ...)

...