簡體   English   中英

如何在 Django 的兩個不同應用程序中的兩個模型上添加兩個不同的 slug?

[英]How can I add two different slugs on two models in two different apps in Django?

我試圖向我的服務頁面和我的項目頁面添加 slug,但是每當我嘗試運行我的項目頁面時,我都會得到頁面未找到 (404) 找不到與查詢匹配的服務請求方法:GET Request URL: http://127.0 .0.1:8000/project/提出者:pages.views.<class 'pages.views.ServiceDetail'>

這是我的基於類的代碼

模型.py

class Service(models.Model):
title = models.CharField(max_length=50)
photo = models.ImageField(upload_to='photos/%Y/%m/%d/')
alt = models.CharField(max_length=60, blank=True)
icon = models.CharField(max_length=20)
description = RichTextField()
shortdesc = models.CharField(max_length=255)
slug = models.SlugField(null=False, unique=True)
created_date = models.DateTimeField(default=datetime.now, blank=True)

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('service_detail', kwargs={'slug': self.slug})

class Project(models.Model):
title = models.CharField(max_length=50)
category = models.CharField(max_length=50)
photo = models.ImageField(upload_to='photos/%Y/%m/%d/')
alt = models.CharField(max_length=60, blank=True)
client = models.CharField(max_length=50)
launched = models.CharField(max_length=50)
demands = models.CharField(max_length=50)
description = RichTextField()
shortdesc = models.CharField(max_length=255)    
slug = models.SlugField(null=False, unique=True)
video_link = models.URLField(max_length=100)
created_date = models.DateTimeField(default=datetime.now, blank=True)

def __str__(self):
    return self.title

def get_absolute_url(self):
    return reverse('project_detail', kwargs={'slug': self.slug})

網址.py

path('<slug:slug>/', views.ServiceDetail.as_view(), name='service_detail'),

path('project/<slug:slug>/', views.ProjectDetail.as_view(), name='project_detail'),

視圖.py

def project(request):
return render(request, 'project/project.html')

class ProjectDetail (generic.DetailView):
model = Project
template_name = 'project/project_detail.html'

def service(request):
return render(request, 'pages/service.html')

class ServiceDetail (generic.DetailView):
model = Service
template_name = 'pages/service_detail.html'

如何重新路由以便我的項目頁面可以正常工作? 任何幫助將不勝感激

您需要更改路徑的順序:

path('project/<slug:slug> ....
path('<slug:slug> ....

對於您當前的訂單,“項目”被解釋為 slug,因為路徑一個接一個地匹配。

您在 urls.py 中的 url 路徑指向 path('project/slug:slug/',...),但是您請求的頁面沒有傳遞 /slug:slug/ 部分http://127.0.0.1: 8000/project/ (缺少 slug 部分)。 請求http://127.0.0.1:8000/project/slug-name (將 slug-name 替換為有效的 slug)並查看它是否有效。

另請參閱 Razensteins 的回答

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM