【问题标题】:NoReverseMatch at/ something wrong with url with slugNoReverseMatch at/ 带有 slug 的 url 有问题
【发布时间】:2016-03-28 03:49:16
【问题描述】:

我收到NoReverseMatch at /:

找不到带有参数“(u”,)和关键字参数“{}”的“类别”。尝试了 1 种模式:['category/(?P[\w\-]+)/$']

我不确定哪里出错了。我知道它是哪里引起的,但我不知道为什么。此网址导致错误:

url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category'),

并且错误来自这个 index.html

{% for category in categories %}
    <li class="list-group-item"><a href="{% url 'category' category.slug %}">{{ category.name }}</a></li>
{% endfor %}

我很确定我的 views.py 没有任何问题,但以防万一我会把它贴在这里

    #for front page

def index(request):
        """This view return index page. In index page, there is thread list.
        And thread list can be sorted by score, number of comment, date, title using paging.
        GET parameters are 'sort' and 'page'. 'sort' is sorting methods. 'page' is number of page.
        :param request: Django request object
        :return: Thread list page
        """

        categories = Category.objects.all()

        try:
                sort = request.GET["sort"].strip()
                sort_method = SortMethods[sort]
                page = request.GET["page"].strip()
        except KeyError:
                sort_method = SortMethods.score
                page = 1

        if sort_method == SortMethods.date:
                thread_list = Post.objects.order_by("-pub_date")
        else:
                thread_list = Post.objects.all()
                thread_list = sorted(thread_list, key=lambda x: x.get_score(), reverse=True)

        paginator = Paginator(thread_list, 30)

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

        context = {
                "posts": posts,
                "pages": paginator.page_range,
                "sort": sort_method.name,
                "categories":categories
        }
        return render(request, "main/index.html", context)

#for single-post page
def post(request, slug):
        single_post = get_object_or_404(Post, slug=slug)
        single_post.views += 1  # increment the number of views
        single_post.save()      # and save it
        context_dict = {
            'single_post' :single_post,
        }

        return render(request, 'main/post.html', context_dict)
#for category page
def category(request, category_name_slug):
    try:

                category = Category.objects.get(slug=category_name_slug)
                sort = request.GET["sort"].strip()
                sort_method = SortMethods[sort]
                page = request.GET["page"].strip()
    except KeyError:
                sort_method = SortMethods.score
                page = 1

    if sort_method == SortMethods.date:
                thread_list = Post.objects.filter(category=category).order_by("-pub_date")
    else:
                thread_list = Post.objects.filter(category=category)
                thread_list = sorted(thread_list, key=lambda x: x.get_score(), reverse=True)

    paginator = Paginator(thread_list, 30)

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

    context = {
                "posts": posts,
                "pages": paginator.page_range,
                "sort": sort_method.name,
                "categories":category,
              "cat_name_slug":category_name_slug,
        }
    return render(request, "main/index.html", context)

【问题讨论】:

    标签: python django django-views django-urls


    【解决方案1】:

    首先要注意的是,您有一个 空弹头

    使用参数 '(u'',)' 和关键字参数 '{}' 未找到的“类别”反转

    一个问题是你如何定义categories - .all() 是一个方法,调用它

    categories = Category.objects.all()
                                 HERE^
    

    此外,您应该检查您的类别是否生成了非空 slug。

    【讨论】:

    • 对不起,我不明白你,我在 index.html 中调用了类别。我不认为这是造成问题的原因?或者是吗?
    • @haloyoba 换句话说,将categories = Category.objects.all 替换为categories = Category.objects.all() 看看是否有帮助。
    • 哦,这是个愚蠢的错误。我仍然得到同样的错误......嗯......我认为它来自 url 中的 slug。当我没有 url 时,我会得到所有类别的名称
    • @haloyoba 好的,您能否展示一下您的 slug 是如何生成的 - 那里可能存在问题,并且 slug 设置为空。
    • 您好,我刚刚编辑了我的views.py,我是否在index.html 中做了这部分,我最好的猜测是我没有把 url 中的命名正确.......(srry 这是我在 django 中的第一个项目
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多