Django: KeyError at / 'slug' - PullRequest
       0

Django: KeyError at / 'slug'

0 голосов
/ 27 апреля 2020

Я пытаюсь перенаправить пользователя к сообщению в соответствии со значением slug. Я использую django -autoslug , чтобы автоматически заполнить слаг в зависимости от заголовка. Я пытаюсь зафиксировать значение slug в переменной sl, однако я получаю KeyError at / 'slug' ошибку.
urls.py

urlpatterns = [
    path('', views.index),
    path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
]

models.py

from django.db import models
from django.template.defaultfilters import slugify
from autoslug import AutoSlugField

class express_publish(models.Model):
    title=models.CharField(max_length=200)
    slug = AutoSlugField(populate_from='title',unique=True)
    author=models.CharField(max_length=50)
    body=models.TextField()
    time=models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.title

просмотров .py

from django.shortcuts import render,redirect
from django.views import generic
from .models import *
from .forms import *
def index(request):
    all_publish=express_publish.objects.all()
    form=express_publishForm()
    if request.method=="POST":
        form=express_publishForm(request.POST)
        if form.is_valid():
            form.save()
        sl=form.cleaned_data['slug']
        return redirect('/'+sl)
    context={'all_publish':all_publish,'form':form}
    return render(request,'publish/index.html',context)

class PostDetail(generic.DetailView):
    model = express_publish
    template_name = 'publish/post_detail.html'

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Вы можете использовать функцию reverse(). https://docs.djangoproject.com/en/3.0/topics/http/urls/#examples

path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
return redirect(reverse('post_detail', args=[sl]))
0 голосов
/ 27 апреля 2020

Вам необходимо создать URL для функции перенаправления: в настоящее время вы не добавляете доменную часть в перенаправление, поэтому Django не может найти ни один соответствующий URL. Вам необходимо использовать 'reverse':

from django.urls import reverse

# ...

sl=form.cleaned_data['slug']
url = reverse('post_detail', kwargs={
    'slug': slug
})
return redirect(url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...