Post() missing 1 required positional argument: 'slug'
Я столкнулся с проблемой в своем проекте Django, и мне нужна ваша помощь. Когда я пытаюсь получить доступ к представлению, которое обрабатывает запросы к странице поста, я получаю следующую ошибку:
post() missing 1 required positional argument: „slug“
Это происходит, когда я пытаюсь перейти на URL, который должен обрабатывать просмотр конкретного поста. Я определил маршрут в urls.py, который принимает параметр slug, и он выглядит так:
path(„post//“, post, name=„post“),
В моем представлении сообщения я ожидаю, что этот параметр будет принят, но похоже, что он передается неправильно.
Я буду очень признателен за любую помощь или совет.
Мой models.py:
from django.db import models
from django.utils.text import slugify
from django.contrib.auth import get_user_model
from django_resized import ResizedImageField
from tinymce.models import HTMLField
from hitcount.models import HitCountMixin, HitCount
from django.contrib.contenttypes.fields import GenericRelation
from taggit.managers import TaggableManager
from django.shortcuts import reverse
User= get_user_model()
class Author(models.Model):
user =models.ForeignKey(User,on_delete=models.CASCADE)
fullname = models.CharField(max_length=40,blank=True)
slug = slug = models.SlugField(max_length=400,unique=True,blank=True)
bio = models.TextField(HTMLField)
points = models.IntegerField(default=0)
profile_pic = ResizedImageField(size=[50,80],quality=100,upload_to='authors',default=None,null=True,blank=True)
def __str__(self):
return self.fullname
def save(self,*args,**kwargs):
if not self.slug:
self.slug = slugify(self.fullname)
super(Author,self).save(*args, **kwargs)
class Category(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(max_length=400,unique=True,blank=True)
class Meta:
verbose_name_plural = 'categories'
def __str__(self):
return self.title
def save(self,*args,**kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Category,self).save(*args, **kwargs)
class Post(models.Model):
title = models.CharField(max_length=400)
slug = models.SlugField(max_length=400,unique=True,blank=True)
user = models.ForeignKey(Author,on_delete=models.CASCADE)
content = HTMLField()
categories = models.ManyToManyField(Category)
date = models.DateTimeField(auto_now_add=True)
approved = models.BooleanField(default=False)
hit_count_generic =GenericRelation(HitCount,object_id_field='object_pk',
related_query_name='hit_count_generic_relation'
)
tags = TaggableManager()
def save(self,*args,**kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Post,self).save(*args, **kwargs)
def __str__(self):
return self.title
def get_url(self):
return reverse("detail", kwargs={'slug': self.slug})
Мой urls.py:
from django.urls import path
from .views import home
from .views import detail,post
urlpatterns = [
path('', home, name='home'),
path('detail/<slug>/', detail, name='detail'),
path('post/<slug>/',post,name='posts'),
]
Мой views.py:
from django.shortcuts import render,get_object_or_404
from .models import Author,Category,Post
from .utils import update_views
def home(request):
return render(request, 'home.html')
def detail(request,slug):
post = get_object_or_404(Post,slug=slug)
context = {
'post':post,
}
update_views(request,post)
return render(request, 'detail.html',context)
def post(request,slug):
category = get_object_or_404(Category,slug=slug)
posts= Post.objects.filter(approved=True,categories=category)
context={
"posts":posts,
}
return render(request, 'posts.html',context)
def image(request):
return render(request, 'detail.html')
Если в вашем URL-адресе не указан тип конвертера, попробуйте следующие варианты:
path('post/<str:slug>/', post, name='post')
path('post/<slug:slug>/', post, name='post')