我正在尝试将表单提交给我的视图:在 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'),
慕沐林林
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()
将来可能会被弃用,因此您应该相应地更改您的代码。
添加回答
举报
0/150
提交
取消