如何在django模板中指定一个URL slug?

laawzig2  于 2022-12-05  发布在  Go
关注(0)|答案(1)|浏览(143)

我正在尝试创建一个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传递到模板文件,然后知道去哪里。
也许我需要用一个模型来保存子弹,但我也不知道该怎么做。

ybzsozfc

ybzsozfc1#

您的网址名为mode,因此您需要将链接更改为使用{% url ‘mode’ ‘2E_C’ %}

相关问题