在 Django 中的模板渲染(NoReverseMatch)期间出错

我正在尝试将表单提交给我的视图:


在 Trending.html 中:


{% extends 'djangobin/base.html' %}


{% load static %}

{% load humanize %}


{% block title %}

    Trending {{ lang.name }} Snippets - {{ block.super }}

{% endblock %}


{% block main %}


    <h5><i class="fas fa-chart-line"></i> Trending {{ lang.name }} Snippets</h5>

    <hr>


    <table class="table">

        <thead>

        <tr>

            <th>Title</th>

            <th>Date</th>

            <th>Hits</th>

            <th>Language</th>

            <th>User</th>

        </tr>

        </thead>

        <tbody>


        {% for snippet in snippets %}

            <tr>

                <td><i class="fas fa-globe"></i>

                    <a href="{{ snippet.get_absolute_url }}">{{ snippet.title }}</a>

                </td>

                <td title="{{ snippet.created_on }}">{{ snippet.created_on|naturaltime }}</td>

                <td>{{ snippet.hits }}</td>

                <td><a href="{% url 'trending_snippets' snippet.language.slug  %}">{{ snippet.language }}</a></td>

                {% if not snippet.user.profile.private %}

                    <td><a href="{{ snippet.user.profile.get_absolute_url }}">{{ snippet.user.username|title }}</a></td>

                {% else %}

                    <td>-</td>

                {% endif %}


            </tr>

        {% empty %}

            <tr class="text-center">

                <td colspan="4">There are no snippets.</td>

            </tr>

        {% endfor %}


        </tbody>

    </table>


{% endblock %}

在views.py中:


from django.shortcuts import HttpResponse, render, redirect, get_object_or_404, reverse

from .forms import SnippetForm

from .models import Language, Snippet


def trending_snippets(request, language_slug=''):

    lang = None

    snippets = Snippet.objects

    if language_slug:

        snippets = snippets.filter(language__slug=language_slug)

        lang = get_object_or_404(Language, slug=language_slug)

    snippets = snippets.all()

    return render(request, 'djangobin/trending.html', {'snippets': snippets, 'lang': lang})


qq_花开花谢_0
浏览 94回答 2
2回答

江户川乱折腾

要匹配c-sharp包含连字符的 ,您需要更改[\w]为[-\w]。url('^trending/(?P<language_slug>[-\w]+)/$',&nbsp;views.trending_snippets,&nbsp;name='trending_snippets'),

慕沐林林

由于它是您要匹配的 slug 字段,因此您可以使用Django 提供的内置 slug 路径转换器通过使用path而不是url.改变:url('^trending/(?P<language_slug>[\w]+)/$',&nbsp;views.trending_snippets,&nbsp;name='trending_snippets'),至:path('trending/<slug:language_slug>)/',&nbsp;views.trending_snippets,&nbsp;name='trending_snippets'),请注意,它slug:匹配连字符、下划线以及 ASCII 字母和数字。url()只是一个别名,re_path()将来可能会被弃用,因此您应该相应地更改您的代码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python