Проблемы с первичным ключом Django
Я создаю простой проект блога. В моем проекте есть одна страница, на которой находится список всех записей блога. Если вы нажмете на название поста, вы перейдете к нему. Я использовал (?P\d+) в пути URL, чтобы пользователь был направлен на нужный пост. Однако, это не сработало. Любая помощь будет очень признательна.
all_posts.html
{% extends "base.html" %}
{% block content %}
<div class="container">
<h1>Blog Posts</h1>
</div>
<div class="container">
{% for blog_post in object_list %}
<table class="table table-striped">
<ul class="list-group">
<li><a class="btn btn-primary" href="{% url 'blog_app:view' pk=blog_post.pk %}">{{ blog_post.post_title }}</a></li>
</ul>
</table>
{% endfor %}
</div>
{% endblock %}
modles.py
from django.db import models
# Create your models here.
class Blog_Post(models.Model):
slug = models.SlugField(max_length=1000, editable=False, null=True)
post_title = models.CharField(max_length=100, editable=True, blank=False, null=True)
blog_content = models.TextField(max_length=10000, blank=False, editable=True, null=True)
files = models.FileField(blank=True, null=True, upload_to=True)
date = models.DateTimeField(blank=False, null=True, auto_now=True, editable=False)
likes = models.IntegerField(blank=True, null=True, editable=False)
urls.py
from django.urls import path
from . import views
app_name = "blog_app"
urlpatterns = [
path('create/', views.create_blog_post.as_view(), name='create'),
path('view/(?P<pk>\d+)/', views.view_blog_post.as_view(), name='view'),
path('all_posts/', views.all_blog_posts.as_view(), name='all'),
path('delete/<slug:slug>', views.delet_blog_post.as_view(), name='delete')
]
path предназначен для конвертеров типа slug, str, int, для работы с regex нужен re_path
вы можете просто переопределить его как "view/<int:pk>/"
{% extends "base.html" %}
{% block content %}
<div class="container">
<h1>Blog Posts</h1>
</div>
<div class="container">
{% for blog_post in object_list %}
<table class="table table-striped">
<ul class="list-group">
<li><a class="btn btn-primary" href="{% url 'blog_app:view' pk=blog_post.pk %}">{{ blog_post.post_title }}</a></li>
</ul>
</table>
{% endfor %}
</div>
{% endblock %}
я думаю, что проблема в этой строке
<li><a class="btn btn-primary" href="{% url 'blog_app:view' pk=blog_post.pk %}">
когда вы отправляете данные в теге url, вы не присваиваете их праметарам, правильная строка будет такой :
<li><a class="btn btn-primary" href="{% url 'blog_app:view' blog_post.pk %}">