我正在尝试创建一个django模板,其中包含到其他页面的链接(特别是静态图片,每个图片都有自己的html模板)。我正在尝试摆脱硬编码的URL和每个页面的视图。相反,我希望用一个通用的slug URL和一个将slug作为输入的视图来捕获它们。
我在www.example.com中的slug URLurls.py工作正常--当我手动输入完整URL中的slug字段时,它会链接到正确的模板并将我引导到正确的页面。然而,当我试图从'cside'模板中引用任何作为slug的链接时,我一直收到以下错误:
NoReverseMatch at /plots/cside
Reverse for '2E_C' not found. '2E_C' is not a valid view function or pattern name.
基本上,我希望'cside'页有链接,是鼻涕虫。
谁能告诉我我错过了什么?我什么都试过了!
这里是我的urls.py:
from django.urls import re_path, path
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from . import views
from .views import mode
urlpatterns = [
re_path(r'^cside$', views.cside, name='cside'),
re_path(r'^lside$', views.lside, name='lside'),
re_path(r'^home$', views.home, name='home'),
#re_path(r'^2E_C$', views.m2E_C),
re_path(r'^4M_C$', views.m4M_C),
re_path(r'^6E_C$', views.m6E_C),
re_path(r'^6M_C$', views.m6M_C),
re_path(r'^8E_C$', views.m8E_C),
re_path(r'^2E_L$', views.m2E_L),
re_path(r'^4M_L$', views.m4M_L),
re_path(r'^6E_L$', views.m6E_L),
re_path(r'^6M_L$', views.m6M_L),
re_path(r'^8E_L$', views.m8E_L),
#re_path(r'^(?P<slug>[-\w]+)/$', views.mode, name='mode'),
path('<slug:slugIn>/', views.mode, name='mode')
]
这里是我的views.py:
from django.views.generic import TemplateView, ListView
from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.views import generic, View
from .models import Mode
def cside(request):
template = loader.get_template('cside.html')
context = {}
return HttpResponse(template.render(context, request))
def lside(request):
template = loader.get_template('lside.html')
context = {}
return HttpResponse(template.render(context, request))
def home(request):
template = loader.get_template('home.html')
context = {}
return HttpResponse(template.render(context, request))
# Slug Solution
#======================================
def mode(request, slugIn=None):
model = Mode
#print(slugIn)
slugOut = Mode.objects.all()
#print(slugOut)
template = loader.get_template(slugIn+'.html')
context = {"slug": slugOut}
return HttpResponse(template.render(context, request))
# Hardcoded Old Solution
#======================================
# def m2E_C(request):
# template = loader.get_template('2E_C.html')
# context = {}
# return HttpResponse(template.render(context, request))
def m400M_C(request):
template = loader.get_template('4M.html')
context = {}
return HttpResponse(template.render(context, request))
def m6E_C(request):
template = loader.get_template('6E_C.html')
context = {}
return HttpResponse(template.render(context, request))
def m6M_C(request):
...
下面是我遇到问题的页面的html模板:
<!DOCTYPE html
<html><head>
<style type="text/css">
a { color:#005fce; text-decoration:none; font-weight:normal;}
c { color:#000000; text-decoration:none; font-weight:bold;}
</style>
</head>
<body><div class="content">
<h1>C SIDE</h1><br>
<a href="{% url 'home' %}">Home</a><br><br>
<c>TYPES:</c><br>
<a href="{% url '2E_C' slug.slug %}">2E</a><br>
<a href="{% url '4M_C' %}">4M</a><br>
<a href="{% url '6E_C' %}">6E</a><br>
<a href="{% url '6M_C' %}">6M</a><br>
<a href="{% url '8E_C' %}">8E</a><br>
我认为我的问题是,我似乎不能将输入slug字段从URL传递到模板文件,然后知道去哪里。
也许我需要用一个模型来保存子弹,但我也不知道该怎么做。
1条答案
按热度按时间ybzsozfc1#
您的网址名为
mode
,因此您需要将链接更改为使用{% url ‘mode’ ‘2E_C’ %}
。