python - /blog/create/blog-post 处的 AttributeError
问题描述
我正在学习 django,但这个错误让我感到恶心。我想创建一个表单来注册新的博客文章。但我得到了这个似乎没有人得到的奇怪错误。我真的是 django 的初学者。这是跟踪:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/blog/create/blog-post
Django Version: 3.2.6
Python Version: 3.9.6
Installed Applications:
['blog',
'django_summernote',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\My_Stuff\Blogistan\env\lib\site-
packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\core\handlers\base.py",
line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\My_Stuff\Blogistan\blog\views.py", line 19, in BlogPostForm
form = BlogPostForm(request.POST or None)
File "C:\My_Stuff\Blogistan\blog\views.py", line 19, in BlogPostForm
form = BlogPostForm(request.POST or None)
Exception Type: AttributeError at /blog/create/blog-post
Exception Value: 'NoneType' object has no attribute 'POST'
这是我的控制台:
Internal Server Error: /blog/create/blog-post
Traceback (most recent call last):
File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\My_Stuff\Blogistan\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\My_Stuff\Blogistan\blog\views.py", line 19, in BlogPostForm
form = BlogPostForm(request.POST)
File "C:\My_Stuff\Blogistan\blog\views.py", line 19, in BlogPostForm
form = BlogPostForm(request.POST)
AttributeError: 'QueryDict' object has no attribute 'POST'
我的views.py
:
def BlogPostForm(request):
form = BlogPostForm(request.POST)
return render(request, 'create_post.html', {
'form': form})
我正在尝试整合django-summernote`` My
forms.py```:
from django.forms import ModelForm
from blog.models import BlogPost
from django_summernote.widgets import SummernoteWidget
class BlogPostForm(ModelForm):
class Meta:
model = BlogPost
fields = '__all__'
widgets = {
'content_html': SummernoteWidget(),
}
我的models.py
:
class BlogPost(models.Model):
title = models.CharField(max_length=360)
urlpattern = models.CharField(max_length=360)
content_html = TextField(max_length=12000)
date_added = models.DateField(auto_now_add=True)
author = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True)
def __str__(self):
return self.title
我的模板:
{% extends 'layout.html' %}
{% block body %}
<form class="post-form" method="post">
{% csrf_token %}
{{form.as_p}}
<button type="submit" class="btn btn-default">Submit</button>
</form>
{% endblock body %}
有人可以帮我弄这个吗。您的帮助将不胜感激。
解决方案
谢谢你的帮助。这是我在 Stackoverflow 上的第一个问题。没想到这么快的回答。我不擅长给变量名。我为解决这个问题所做的就是使用django.views.generic.edit.CreateView
,这就是我现在的观点。
class BlogPostCreateView(CreateView):
form_class = BlogPostForm
model = BlogPost
template_name = 'create_post.html'
success_url='/'
这是表格。
class BlogPostForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
kwargs.setdefault('label_suffix', '')
super(BlogPostForm, self).__init__(*args, **kwargs)
content_html = forms.CharField(widget=SummernoteWidget)
class Meta:
model = BlogPost
fields = '__all__'
label_suffix = ''
labels = {
'content_html': '',
'title': 'Title',
'urlpattern': 'Slug'
}
widgets = {
'title': forms.TextInput(attrs={
'class': 'form-control',
}),
'urlpattern': forms.TextInput(attrs={
'class': 'form-control',
}),
}
这工作得很好,造型比以往任何时候都容易
推荐阅读
- javascript - React:如何让我的 SearchBar 在另一个页面中呈现?
- css - 缩放后忽略混合模式 [Safari]
- hyperlink - 使用查看源和检查元素查看时出现的链接
- kubernetes - Kubernetes Operators:根据内部容器信息构建自定义资源状态
- python - 当我们只存储所有可能的字母时,为什么答案的最佳空间复杂度是 O(n)?
- c - linux终端输出冗余内容
- lightningchart - 热图中的全高ScrollingGridSeries
- node.js - 出现“npm outdated”错误:仅支持标签、版本和范围
- github - GitHub 目录拉取
- django - 如何在 Django Rest 中从管理员更改分页大小