【发布时间】:2016-02-07 06:46:01
【问题描述】:
我对 Django 还很陌生,所以我自然而然地碰壁了。我在尝试创建博客页面时收到此错误消息。我试图阅读我遇到的错误,但无济于事。
完全错误:
TypeError at /blog/
post() missing 1 required positional argument: 'slug'
Request Method: GET
Request URL: http://127.0.0.1:8000/blog/
Django Version: 1.9.2
Exception Type: TypeError
Exception Value:
post() missing 1 required positional argument: 'slug'
Exception Location: /usr/lib/python3.4/site-packages/django/core/handlers/base.py in get_response, line 147
Python Executable: /usr/bin/python3.4
Python Version: 3.4.3
Python Path:
['/home/rumen/Desktop/venv2/blog_project',
'/usr/lib/python3.4',
'/usr/lib/python3.4/plat-x86_64-linux-gnu',
'/usr/lib/python3.4/lib-dynload',
'/usr/lib/python3.4/site-packages',
'/usr/local/lib/python3.4/dist-packages',
'/usr/lib/python3/dist-packages']
下面是我的模型:
from django.db import models
from django import forms
from django.core.urlresolvers import reverse
class Post(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(unique=True, max_length=255)
description = models.CharField(max_length=255)
content = models.TextField()
published = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created']
def __unicode__(self):
return u'%s' % self.title
def get_absolute_url(self):
return reverse('blog.views.post', args=[self.slug])
帖子视图:
{% block title %}{{post.title}}{% endblock %}
{% block content_blog %}
<article>
<header>
<h1> {{post.title}} </h1>
<p>
Posted on
<time datetime="{{post.created|date:"c"}}">
{{post.created|date}}
</time>
</p>
</header>
<p class="description">
{{post.description}}
</p>
{{post.content|safe}}
</article>
{% endblock %}
网址格式:
urlpatterns = [
url(r'^blog/$', 'blog.views.post', name='blogpage'),
url(r'^(?P<slug>[\w\-]+)/$', 'blog.views.post'),
]
查看:
from django.conf import settings
from django.shortcuts import render, get_object_or_404
from blog.models import Post
from .forms import ContactForm
from django.core.mail import send_mail
def index(request):
posts = Post.objects.filter(published=True)
return render(request, 'blog/index.html', {'posts': posts})
def post(request, slug):
post = get_object_or_404(Post, slug=slug)
return render(request, 'blog/post.html', {'post': post})
def contact(request):
form = ContactForm(request.POST or None)
if form.is_valid():
form_email = form.cleaned_data.get("email")
form_message = form.cleaned_data.get("message")
form_full_name = form.cleaned_data.get("full_name")
subject = 'Site contact form'
from_email = settings.EMAIL_HOST_USER
to_email = [from_email, '#']
contact_message = "%s: %s via %s"%(
form_full_name,
form_message,
form_email)
send_mail(subject,
contact_message,
from_email,
to_email,
fail_silently=False)
context = {
"form": form,
}
return render (request, 'forms.html', context)
不知道我还需要发布什么来为你们提供更多详细信息。
我在 ubuntu 14.04 上使用 python 3.4.1 和 django 1.9。
【问题讨论】:
-
那么完整的错误是什么,您是否真的尝试过提供它告诉您的参数是必需的?
-
至少,由于该错误告诉您它发生在
post视图中,您应该发布该函数及其 URL 模式。 -
您现在已经发布了模板和 URL,但仍然没有按照我的要求发布视图功能,或者像 Jon 所做的那样发布完整的错误。
-
可以在错误中包含堆栈跟踪吗?