@@ -16,7 +16,6 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
1616
1717好吧,让我们打开它,然后键入以下代码:
1818
19- python
2019 from django import forms
2120
2221 from .models import Post
@@ -44,15 +43,13 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
4443
4544是时候打开` blog/templates/blog/base.html ` 了。我们将添加一个链接到` div ` ,命名为` page-header ` :
4645
47- html
4846 <a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>
4947
5048
5149请注意我们想要调用我们的新视图` post_new ` .
5250
5351添加了新的行后,你的html文件现在应该看起来像这样:
5452
55- html
5653 {% load staticfiles %}
5754 <html>
5855 <head>
@@ -85,13 +82,11 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
8582
8683我们打开` blog/urls.py ` 然后添加一个新行:
8784
88- python
8985 url(r'^post/new/$', views.post_new, name='post_new'),
9086
9187
9288最终代码会看起来像这样:
9389
94- python
9590 from django.conf.urls import include, url
9691 from . import views
9792
@@ -108,13 +103,11 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
108103
109104现在打开` blog/views.py ` 文件,加入下面的各行到` from ` 行下:
110105
111- python
112106 from .forms import PostForm
113107
114108
115109还有我们的* view* :
116110
117- python
118111 def post_new(request):
119112 form = PostForm()
120113 return render(request, 'blog/post_edit.html', {'form': form})
@@ -137,7 +130,6 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
137130
138131好,让我们看看HTML 在` post_edit.html ` 里应该看起来什么样:
139132
140- html
141133 {% extends 'blog/base.html' %}
142134
143135 {% block content %}
@@ -165,7 +157,6 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
165157
166158再一次打开` blog/views,py ` 。我们在看到` post_new ` 中的视图内容是:
167159
168- python
169160 def post_new(request):
170161 form = PostForm()
171162 return render(request, 'blog/post_edit.html', {'form': form})
@@ -175,7 +166,6 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
175166
176167所以在我们的* 视图* 里,我们有了两种不同的情况去处理。 首先:当我们首次访问一个页面,我们想要得到一个空白的页面。 第二:当我们回到* 视图* ,要有我们所有我们刚刚键入的数据。 所以我们需要添加一个条件判断(我们为此使用` if ` )。
177168
178- python
179169 if request.method == "POST":
180170 [...]
181171 else:
@@ -184,15 +174,13 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
184174
185175现在去填写` [...] ` 。如果` method ` 是 ` POST ` ,那么我们要用表单里的数据构建` PostForm ` ,对吗?我们会这样做:
186176
187- python
188177 form = PostForm(request.POST)
189178
190179
191180很容易吧!下一件事情就是去检查表单是否正确(所有必填字段都要被设置并且不会保存任何不正确的值)。我们将使用` form.is_valid() ` 来实现.
192181
193182我们检查表单是否正确,如果是我们就保存它!
194183
195- python
196184 if form.is_valid():
197185 post = form.save(commit=False)
198186 post.author = request.user
@@ -204,21 +192,18 @@ Django表单的一个好处就是我们既可以从零开始自定义,也可
204192
205193最后,如果我们能够立即去` post_detail ` 页面创建新的博客内容,那将很酷,对吗?为了做到这点,我们需要再导入一个:
206194
207- python
208195 from django.shortcuts import redirect
209196
210197
211198把它添加到你文件的最开始处。现在我们可以说:创建完新帖子我们就转去` post_detail ` 页面。
212199
213- python
214200 return redirect('blog.views.post_detail', pk=post.pk)
215201
216202
217203` blog.views.post_detail ` 是我们想去的视图的名字。 还记得这个* 视图* 需得具有一个 ` pk ` 变量吗? 为了把它传递给视图我们使用` pk=post.pk ` , 其中 ` post ` 就是我们刚刚创立的博客帖子!
218204
219205好吧,我们已经说了很多了,但可能我们想看到整个* 视图* 现在看起来什么样,对吗?
220206
221- python
222207 def post_new(request):
223208 if request.method == "POST":
224209 form = PostForm(request.POST)
@@ -263,13 +248,11 @@ Django会处理验证我们表单里的所有字段都是正确的。这不是
263248
264249打开 ` blog/templates/blog/post_detail.html ` 并添加以下行:
265250
266- python
267251 <a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"></span></a>
268252
269253
270254所以模板看起来像这样:
271255
272- html
273256 {% extends 'blog/base.html' %}
274257
275258 {% block content %}
@@ -287,16 +270,14 @@ Django会处理验证我们表单里的所有字段都是正确的。这不是
287270
288271
289272在` blog/urls.py ` 里我们添加这行:
290-
291- python
292- url(r'^post/(?P<pk>[0-9]+)/edit/$', views.post_edit, name='post_edit'),
273+
274+ url(r'^post/(?P<pk >[ 0-9] +)/edit/$', views.post_edit, name='post_edit'),
293275
294276
295277我们将复用模板` blog/templates/blog/post_edit.html ` ,所以最后缺失的东西就是 * view* .
296278
297279让我们打开` blog/views.py ` ,并在文件的最后加入:
298280
299- python
300281 def post_edit(request, pk):
301282 post = get_object_or_404(Post, pk=pk)
302283 if request.method == "POST":
@@ -314,13 +295,11 @@ Django会处理验证我们表单里的所有字段都是正确的。这不是
314295
315296这看起来几乎完全和我们的` post_new ` 视图一样,对吗? 但是不完全是。 第一件事:我们从urls里传递了一个额外的` pk ` 参数。 然后:我们得到了` Post ` 模型,我们想编辑` get_object_or_404(Post, pk=pk) ` ,然后当我们创建了一个表单我们用一个` 实例 ` 来传递这篇文章,当我们想保存它:
316297
317- python
318298 form = PostForm(request.POST, instance=post)
319299
320300
321301当我们只是打开这篇文章的表单来编辑时:
322302
323- python
324303 form = PostForm(instance=post)
325304
326305
@@ -348,13 +327,11 @@ Django会处理验证我们表单里的所有字段都是正确的。这不是
348327
349328在 ` blog/templates/blog/base.html ` 中,找到我们 ` page-header ` ` div ` 和你早些时候在放那里锚点标记。看起来应该像这样:
350329
351- html
352330 <a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>
353331
354332
355333我们要将另一个 ` {% if %} ` 标记到这, 这会使链接仅在以管理者身份登录的用户访问时显示。现在来说,管理员就是你! 像这样修改 ` <a> ` 标记:
356334
357- html
358335 {% if user.is_authenticated %}
359336 <a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>
360337 {% endif %}
@@ -393,4 +370,4 @@ Django会处理验证我们表单里的所有字段都是正确的。这不是
393370
394371 [ 8 ] : https://www.pythonanywhere.com/web_app_setup/
395372
396- 就是这样!祝贺你:)
373+ 就是这样!祝贺你:)
0 commit comments