为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_花开花谢_0 2022-10-18 14:48:05
我正在尝试将表单提交给我的视图:在 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, reversefrom .forms import SnippetFormfrom .models import Language, Snippetdef 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})
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

要匹配c-sharp包含连字符的 ,您需要更改[\w][-\w]

url('^trending/(?P<language_slug>[-\w]+)/$', views.trending_snippets, name='trending_snippets'),



查看完整回答
反对 回复 2022-10-18
?
慕沐林林

TA贡献2016条经验 获得超9个赞

由于它是您要匹配的 slug 字段,因此您可以使用Django 提供的内置 slug 路径转换器通过使用path而不是url.

改变:

url('^trending/(?P<language_slug>[\w]+)/$', views.trending_snippets, name='trending_snippets'),

至:

path('trending/<slug:language_slug>)/', views.trending_snippets, name='trending_snippets'),

请注意,它slug:匹配连字符、下划线以及 ASCII 字母和数字。

url()只是一个别名,re_path()将来可能会被弃用,因此您应该相应地更改您的代码。


查看完整回答
反对 回复 2022-10-18
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信