python - 来自 DB 文件值的 Django URL 路径
问题描述
我正在尝试创建使用 {{ project.title }} 值生成路径的“项目”页面,而不是使用整数的当前方法。我不太明白我怎么能做到这一点,但觉得我很接近?
模型.py
from django.db import models
# Create your models here.
class Project(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
technology = models.CharField(max_length=20)
image = models.FilePathField(path='projects/static/img/')
live = models.URLField()
source = models.URLField()
def __str__(self):
return self.title
网址.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.project_index, name="projects"),
path("<int:pk>/", views.project_details, name="project_details"), # PK for Primary Key
]
视图.py
from django.shortcuts import render
from .models import Project
# Create your views here.
def project_index(request):
projects = Project.objects.all()
context = {'projects': projects}
return render(request, 'projects/project_index.html', context)
def project_details(request, pk):
project = Project.objects.get(pk=pk)
context = {'project': project}
return render(request, 'projects/project_details.html', context)
我path("<int:pk>/",
认为需要成为一个蛞蝓,但我就是不知道如何绑定数据库数据。可能context = {'project': project}
吗?
目前的网址是http://127.0.0.1:8000/projects/1/ - 我正在寻找http://127.0.0.1:8000/projects/EXAMPLE/
谢谢
解决方案
SlugField
您必须在文件中添加一个models.py
:
模型.py
from django.db import models
from django.utils.text import slugify
# Create your models here.
class Project(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
technology = models.CharField(max_length=20)
image = models.FilePathField(path='projects/static/img/')
live = models.URLField()
source = models.URLField()
slug = models.SlugField(default="", blank=True, null=False, db_index=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super().save(*args, **kwargs)
视图.py
from django.shortcuts import render
from .models import Project
# Create your views here.
def project_index(request):
projects = Project.objects.all()
context = {'projects': projects}
return render(request, 'projects/project_index.html', context)
def project_details(request, slug):
project = Project.objects.get(slug=slug)
context = {'project': project}
return render(request, 'projects/project_details.html', context)
网址.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.project_index, name="projects"),
path("<slug:slug>/", views.project_details, name="project_details"),
]
确保运行makemigrations
,然后migrate
.
推荐阅读
- windows - 如何仅打印 Get-ExecutionPolicy 中的 Scope 和 Policy 项?
- python - 可以同步两个实例,一个播放 mp4,另一个播放 m3u8?
- xml - XSD 断言:按顺序将所有值相乘
- mysql - MySQL.Data DateTime.Kind 在 SQL DATETIME 和 TIMESTAMP 之间是不同的
- r - 将多个相同长度的时间序列数据帧添加到一列中
- python - 在 Django 中重新排序 Modelform 上的下拉列表
- kubernetes - 在 k8s 集群内部访问服务除了通过 ingress 将它们暴露在外部
- python - shutil.rmtree 失败,因为文件在路径中有 \\?\
- c# - System.Windows.Input.TouchFrameEventHandler 在讲述人打开时不起作用
- php - 获取重复列数据及其自身数据的计数