首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django: KeyError at / 'slug‘

Django: KeyError at / 'slug‘
EN

Stack Overflow用户
提问于 2020-04-27 07:21:14
回答 2查看 238关注 0票数 0

我正在尝试根据slug值将用户重定向到post。我使用django-autoslug根据标题自动填充插件。我试图捕获sl变量中的slug值,但是我得到了KeyError at / 'slug'错误。

urls.py

代码语言:javascript
复制
urlpatterns = [
    path('', views.index),
    path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
]

models.py

代码语言:javascript
复制
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

views.py

代码语言:javascript
复制
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'
EN

回答 2

Stack Overflow用户

发布于 2020-04-27 07:37:03

你需要为redirect函数创建url :目前你没有将域部分添加到redirect中,所以Django找不到任何匹配的url。你需要使用'reverse':

代码语言:javascript
复制
from django.urls import reverse

# ...

sl=form.cleaned_data['slug']
url = reverse('post_detail', kwargs={
    'slug': slug
})
return redirect(url)
票数 0
EN

Stack Overflow用户

发布于 2020-04-27 17:41:46

您可以使用reverse()函数。https://docs.djangoproject.com/en/3.0/topics/http/urls/#examples

代码语言:javascript
复制
path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
代码语言:javascript
复制
return redirect(reverse('post_detail', args=[sl]))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61449406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档