Я работаю в своем блог-проекте по изучению django. Но мои URL-адреса не работают правильно, когда я создаю сообщение, мое сообщение успешно создано и сохраняется в моей базе данных, и я вижу свою открытку в своем блоге. Но когда я нажимаюпочтовая карточка для показа сообщений отправителя, получающего эту ошибку
Страница не найдена (404) Метод запроса: GET URL запроса: http://127.0.0.1:8000/blog/post/2019/10/5/testing-urls-design/ Поднято: Blog.views.post
это часть моих моделей для блога:
models.py
class Post(models.Model):
image = models.ImageField(upload_to='Posts_image')
title = models.CharField(max_length=256)
slug = models.SlugField(max_length=256,null=True,blank=True)
content = HTMLField('Content')
date = models.DateTimeField(auto_now_add=True)
categories = models.ManyToManyField(category)
tags = TaggableManager()
publish = models.BooleanField(default=False)
def __str__(self):
return self.title
def get_absolute_url(self):
kwargs = {
'year':self.date.year,
'month':self.date.month,
'day':self.date.day,
'slug':self.slug,
}
return reverse('blog:post-detail', kwargs=kwargs)
Эта часть для создания слаг в моделях.py
def create_slug(instance, new_slug=None):
slug = slugify(instance.title, allow_unicode=True)
if new_slug is not None:
slug = new_slug
qs = Post.objects.filter(slug=slug).order_by("-id")
exists = qs.exists()
if exists:
new_slug = "%s-%s" %(slug, qs.first().id)
return create_slug(instance, new_slug=new_slug)
return slug
def slug_generator(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = create_slug(instance)
pre_save.connect(slug_generator, sender=Post)
после этой части вы видите мои views.py
def post(request, year, month,day, slug):
post = get_object_or_404(Post, date__year=year, date__month=month, date__day=day, slug=slug)
comment_form = CommentForm(request.POST or None)
new_comment = None
if request.method == "POST":
if comment_form.is_valid():
new_comment = comment_form.save(commit=False)
new_comment.post = post
new_comment.save()
comment_form = CommentForm()
context = {
'post':post,
'comment_form':comment_form,
}
return render(request, 'Blog/post.html', context)
, а это мои urls.py (этот URL для моего блога, и я включаю URL-адрес блога в свой проект urls.py)
app_name = 'blog'
urlpatterns = [
path('', views.blog, name='blog'),
path('post/<int:year>/<int:month>/<int:day>/<slug:slug>/', views.post, name='post-detail'),
]
, и я использую этот код для показа сообщений:
href="{{ post.get_absolute_url }}"
ОКПосмотрите мой код. Я рисую этот код для своего блога и пытаюсь создать симпатичный URL для своего поста, но он не работает правильно
Я искал в стеке потокошибка, но я не могу найти полезный ответ, и я был вынужден снова спросить об этих ошибках Спасибо
ОТВЕТ :
вы можете использовать эту функцию для создания уникальных слагов Когда выиметь похожее название этой функции добавить случайный алфавит для пули
import string
import random
from django.utils.text import slugify
def random_string_generator(size = 10, chars = string.ascii_lowercase +
string.digits):
return ''.join(random.choice(chars) for _ in range(size))
def unique_slug_generator(instance, new_slug = None):
if new_slug is not None:
slug = new_slug
else:
slug = slugify(instance.configure_slug, allow_unicode=True)
Klass = instance.__class__
qs_exists = Klass.objects.filter(slug = slug).exists()
if qs_exists:
new_slug = "{slug}-{randstr}".format(
slug = slug, randstr = random_string_generator(size = 4))
return unique_slug_generator(instance, new_slug = new_slug)
return slug