Django URL Путь из значения файла БД
Я пытаюсь создать страницы "проекта", пути к которым генерируются с помощью значений {{ project.title }}, а не текущим методом, который использует ints. Я не совсем понимаю, как я могу это сделать, но чувствую, что я близок к этому?
Models.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
Urls.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
]
Views.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>/",
должен быть slug, но я просто не могу понять, как связать данные БД.
Потенциально context = {'project': project}
?
В настоящее время url имеет вид http://127.0.0.1:8000/projects/1/ - я ищу http://127.0.0.1:8000/projects/EXAMPLE/
Спасибо
Вам необходимо добавить SlugField
в ваш models.py
файл:
Models.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()
slug = models.SlugField(default="", blank=True, null=False, db_index=True)
def __str__(self):
return self.title
Views.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}
Urls.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"),
]
urls.py
path("<title>/", views.project_details, name="project_details"),
views.py
from django.shortcuts import get_object_or_404
def project_details(request, title: str):
project = get_object_or_404(Project, title=title)