NoReverseMatch at / Reverse для «категории» с аргументами (u'Animals ',)' - PullRequest
1 голос
/ 14 марта 2019

Есть несколько подобных проблем, но я все еще не могу понять, как исправить мой код.

Когда я запускаю сервер, Django выдает мне эту ошибку:

> Reverse for 'category' with arguments '(u'Animals',)' and keyword
> arguments '{}' not found. 0 pattern(s) tried: []

> Error during template rendering
>In template /home/joelramone/django/myblog/blog/templates/pages/home.html, 
error at line 0

Вот urls.py:

from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.views import static as django_static
from blog import views as blog_views


url(r'^admin/', admin.site.urls),
url(r'^$',  blog_views.home),
url(r'^post/(?P<single>[-\w]+)/$', blog_views.single, name='single'),
url(r'^category/(?P<category>[-\w]+)/$', blog_views.archive, name='category'),
url(r'^images/(?P<path>.*)/$', django_static.serve, {'document_root': settings.BAS_DIR + '/images'}),

Вот models.py:

class Post(models.Model):
    author = models.ForeignKey('auth.User')
    title = models.CharField(max_length=150)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    category = models.ManyToManyField('blog.Category', blank=True, null=True)
    image = models.FileField(blank=True, upload_to='images')

    def __str__(self):
        return self.title


class Category(models.Model):
    title = models.CharField(max_length=150)
    slug = models.CharField(max_length=150)
    parent = models.ForeignKey('blog.Category', blank=True, null=True)

    @staticmethod
    def list_categories():
        return Category.objects.all()

    def __str__(self):
        return self.title

Вот views.py:

def home(request):
    post_list = Post.objects.all()
    paginator = Paginator(post_list, 1)
    page = request.GET.get('page')
    categories = Category.list_categories()

    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)
    return render(request, 'pages/home.html', {'posts': posts, 'categories': categories})


def single(request, single):
    single = Post.objects.get(id=single)
    context = {
        'post': single
    }
    return render(request, 'pages/single.html', context)


def archive(request, category):
    cat = Category.objects.get(slug=category)
    post_list = Post.objects.filter(category__pk=cat.id)
    paginator = Paginator(post_list, 1)
    page = request.GET.get('page')
    categories = Category.list_categories()

    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
       posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)

    return render(request, 'pages/archive.html', {'posts': posts, 'categories': categories, 'category': cat.title})

header.html и footer.html являются кодом начальной загрузки. Он вызывается из home.html через это предложение {% include 'частичный / header.html'%} и {% include 'частичный / footer.html'%}

Вот home.html:

{% include 'partial/header.html' %}

    <h1>
        Home
    </h1>
    <hr>
    <ul>
        {% for post in posts %}
        <li>
            <a href="{% url 'single' post.id %}">
                {{post.title}} - {{post.id}}

            </a>
        </li>
         {% endfor %}

    </ul>

    <div class="pagination">
        {% if posts.has_previous %}
            <a href="?page={{post.previous_page_number}}">
                 prev
             </a>
        {% endif %}
        {% if posts.has_next %}
            <a href="?page={{post.next_page_number}}">
                next
            </a>
        {% endif %}

        Page {{posts.number}} of {{posts.paginator.num_pages}}
    </div>
{% include 'partial/footer.html' %}

Вот header.html:

<!DOCTYPE html>
<html lang="en">

<head>

    <title>MyBlog</title>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
</head>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
    integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <a class="navbar-brand" href="#">MyBlog</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav mr-auto">

                <li class="nav-item active">
                    <a href="/">Home
                    </a>
                </li>


                {% for category in categories %}
                <li class="nav-item">

                    <a class="nav-link" href="{% url 'category' category.slug %}">{{category.title}}</a>

                </li>
                {% endfor %}
            </ul>

        </div>
    </nav>

здесь footer.html:

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
        integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
        crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
        integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
        crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
        integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
        crossorigin="anonymous"></script>
</body>

</html>

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