django - 使用 Django slug,出现无反向路径错误
问题描述
如果您已经阅读了我之前关于 Django slug 问题的帖子,我深表歉意。我清理了我的旧代码,也许对我在做什么有了更好的理解,但我仍然不知道如何让一个从 slug 生成的 URL 在我的主登录页面上工作。
我正在做一个投资组合。我有一个登录页面,我将在其中链接到各个详细信息页面。我在我的模型中使用 get_absolute_url 来做到这一点。对此进行测试时,我可以在单个项目详细信息页面上获取链接,但不能在主要登录页面上使用。这很有趣,因为我不需要这些链接来处理单个项目页面。我的猜测是我认为某些东西设置不正确。
我的views.py 是这样设置的:
from django.shortcuts import render, get_object_or_404, get_list_or_404
from .models import Project
def home(request):
projects = Project.objects.all()
return render(request, 'portfolio/home.html', {'projects': projects})
def individual_project_view(request, project_id):
projectpage = get_list_or_404(Project, slug=project_id)
return render(request, 'portfolio/project_detail.html',{'projectpage':projectpage})
def project_home(request):
portfolioprojects = get_list_or_404(Project)
return render(request, 'portfolio/project_detail.html', {'portfolioprojects':portfolioprojects})
这是我的各个登陆页面的 urls.py,它们位于单独的应用程序中。
from django.urls import path, include
from . import views
app_name = 'portfolio'
urlpatterns = [
path('', views.project_home, name='project_home'),
path('<slug:project_id>/', views.individual_project_view, name='individual_project'),
]
根文件夹中的 urls.py 设置如下:
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from portfolio import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('portfolio/', include('portfolio.urls'), name='portfolio'),
]
我的 models.py 是这样设置的:
from django.db import models
from django.urls import reverse
# Create your models here.
class Project(models.Model):
category = models.CharField(max_length=75, blank=True)
project_name = models.CharField(max_length=100)
company = models.CharField(max_length=250)
image = models.ImageField(upload_to='portfolio/images/')
client = models.CharField(max_length = 30, blank=True)
type = models.CharField(max_length = 80, blank=True)
slug = models.SlugField(max_length=50, blank=True)
description = models.TextField( blank=True)
testimonial = models.TextField(blank=True)
featuredimage = models.ImageField(upload_to='portfolio/images/', blank=True)
type2 = models.CharField(max_length = 80, blank=True)
description2 = models.TextField(blank=True)
featuredimage2 = models.ImageField(upload_to='portfolio/images/', blank=True)
url = models.URLField(blank=True)
url2 = models.URLField(blank=True)
testimonial2 = models.TextField(blank=True)
projecturl = models.URLField(blank=True)
projecturl2 = models.URLField(blank=True)
def get_absolute_url(self):
# u create url only here and then reference here throughout of your project
return reverse('portfolio:individual_project',args=[self.slug])
def __str__ (self):
return self.project_name
我尝试访问此链接的主登录页面的 HTML 如下:
{% for project in projects %}
<div class="col-lg-4 col-md-6 padding_top">
{% if project.url %}
<a href="{{ project.url }}">
<img src="{{ project.image.url }}" class="img-fluid mb-2">
</a>
{% else %}
<a href="{% url 'individual_project' project.slug %}">
<img src="{{ project.image.url }}" class="img-fluid mb-2">
</a>
当我尝试访问此模板时,我收到以下错误:
" NoReverseMatch at / Reverse for 'individual_project' 未找到。'individual_project' 不是有效的视图函数或模式名称。"
真正让我困惑的是,当我尝试这种方式时,它<a href="{{project.get_absolute_url}}">
适用于项目详细信息模板,该模板以 home.html 为首,{% for content in projectpage %}
但不在具有代码的 home.html 上{% for project in projects %}
感谢您的帮助!
解决方案
推荐阅读
- regex - Bash 将两条特定的行合并为一条
- c++ - Why does my interrupt get called, but won't enter the handler?
- reporting-services - 如何在 RDLC 报告的每一页上显示页眉?
- python - 需要类“numpy.int32”,但 type() 函数仅显示:numpy.ndarray
- python - Django Forms - Is 'readonly' safe to use?
- http - What is the difference between THTTPClient and TNetHTTPClient?
- android - issue in while using `WorkContinuation.combine()` when WorkManger is initialized using dagger2
- python - 更新 Anaconda 时出错:UnsatisfiableError: 发现以下规范有冲突
- excel - How to open files in folder with specific name in VBA?
- excel - 将公式输入vba时出现错误代码