1. #myproject/urls.py
  2. url(r'^boards/(?P<pk>\d+)/topics/(?P<topic_pk>\d+)/reply/$',views.reply_topic, name='reply_topic'),
  3.  
  4. #boards/forms.py
  5. from .models import Post
  6. class PostForm(forms.ModelForm):
  7. class Meta:
  8. model = Post
  9. fields = ['message', ]
  10.  
  11. #一个新的受 @login_required 保护的视图,以及简单的表单处理逻辑
  12. #boards/views.py
  13. from .forms import PostForm
  14. @login_required
  15. def reply_topic(request, pk, topic_pk):
  16. topic = get_object_or_404(Topic, board__pk=pk, pk=topic_pk)
  17. if request.method == 'POST':
  18. form = PostForm(request.POST)
  19. if form.is_valid():
  20. post = form.save(commit=False)
  21. post.topic = topic
  22. post.created_by = request.user
  23. post.save()
  24. return redirect('topic_posts', pk=pk, topic_pk=topic_pk)
  25. else:
  26. form = PostForm()
  27. return render(request, 'reply_topic.html', {'topic': topic, 'form': form})
  28.  
  29. <!--templates/reply_topic.html-->
  30. {% extends 'base.html' %}
  31. {% load static %}
  32. {% block title %}Post a reply{% endblock %}
  33. {% block breadcrumb %}
  34. <li class="breadcrumb-item"><a href="{% url 'home' %}">Boards</a></li>
  35. <li class="breadcrumb-item"><a href="{% url 'board_topics' topic.board.pk %}">{{ topic.board.name }}</a></li>
  36. <li class="breadcrumb-item"><a href="{% url 'topic_posts' topic.board.pk topic.pk %}">{{ topic.subject }}</a></li>
  37. <li class="breadcrumb-item active">Post a reply</li>
  38. {% endblock %}
  39. {% block content %}
  40. <form method="post" class="mb-4">
  41. {% csrf_token %}
  42. {% include 'includes/form.html' %}
  43. <button type="submit" class="btn btn-success">Post a reply</button>
  44. </form>
  45. {% for post in topic.posts.all %}
  46. <div class="card mb-2">
  47. <div class="card-body p-3">
  48. <div class="row mb-3">
  49. <div class="col-6">
  50. <strong class="text-muted">{{ post.created_by.use rname }}</strong>
  51. </div>
  52. <div class="col-6 text-right">
  53. <small class="text-muted">{{ post.created_at }}</small>
  54. </div>
  55. </div>
  56. {{ post.message }}
  57. </div>
  58. </div>
  59. {% endfor %}
  60. {% endblock %}
  1. <!--templates/topic_posts.html(-->
  2.  
  3. {% for post in topic.posts.all %}
  4. <div class="card mb-2 {% if forloop.first %}border-dark{% endif %}">
  5. {% if forloop.first %}
  6. <div class="card-header text-white bg-dark py-2 px-3">{{ topic.subject }}</div>
  7. {% endif %}
  8. <div class="card-body p-3">
  9. <!-- code suppressed -->
  10. </div>
  11. </div>
  12. {% endfor %}

Django入门与实践-第19章:主题回复(完结)的更多相关文章

  1. Django入门与实践-第15章:用户注销(完结)

    # myproject/settings.py LOGOUT_REDIRECT_URL = 'home' http://127.0.0.1:8000/logout/ # myproject/urls. ...

  2. Django入门与实践-第26章:个性化工具(完结)

    http://127.0.0.1:8000/boards/1/topics/62/reply/ 我觉得只添加内置的个性化(humanize)包就会很不错. 它包含一组为数据添加“人性化(human t ...

  3. Django入门与实践-第23章:分页实现(完结)

    http://127.0.0.1:8000/boards/1/ #从现在起,我们将在 board_topics 这个视图中来操作. python manage.py shell from django ...

  4. Django入门与实践-第14章:用户注册(完结)

    http://127.0.0.1:8000/signup/ django-admin startapp accounts INSTALLED_APPS = [ 'accounts', ] # mypr ...

  5. Django入门与实践-第13章:表单处理(完结)

    http://127.0.0.1:8000/boards/1/ http://127.0.0.1:8000/boards/2/ http://127.0.0.1:8000/boards/3/ http ...

  6. Django入门与实践-第12章:复用模板(完结)

    http://127.0.0.1:8000/http://127.0.0.1:8000/boards/1/http://127.0.0.1:8000/boards/2/http://127.0.0.1 ...

  7. Django入门与实践-第11章:URL 分发(完结)

    http://127.0.0.1:8000http://127.0.0.1:8000/boards/1/http://127.0.0.1:8000/boards/2/http://127.0.0.1: ...

  8. Django入门与实践-第25章:Markdown 支持(完结)

    http://127.0.0.1:8000/boards/1/topics/102/reply/ 让我们在文本区域添加 Markdown 支持来改善用户体验. 你会看到要实现这个功能非常简单. 首先, ...

  9. Django入门与实践-第24章:我的账户视图(完结)

    http://127.0.0.1:8000/settings/account/ #好的,那么,这部分将是我们最后的一个视图.之后,我们将专心来改进现有功能. #accounts/views.py fr ...

随机推荐

  1. as2 无法加载类或接口

    1.最大问题就是可能新建文件的时候选择as3的as或者直接复制了as3的as文件过来修改.as文件必须是2的 2.类名是否一致 3.包引用是否正确

  2. pycharm专业版(window)安装

    1.官网下载 2. 3.直接finlsh 4. 5. https://pan.baidu.com/s/1mQcc98iJS5bnIyrC6097yA   密码:b1c1

  3. Apache配置本地域名

    打开Apache的安装目录,找到httpd.conf文件,分别去掉下面两行文字前面的#号. LoadModule vhost_alias_module modules/mod_vhost_alias. ...

  4. unity Object-c交互

    一.unity 调用 Object-c C/C++可以直接与Object-c交互,只要把文件后缀.m直接改成.mm,成为C/C++与Object-c混编文件.C#又可以调用C/C++方法,所以C#就是 ...

  5. Javaweb连接数据库

    在JSP中使用JDBC驱动连接mysql数据库. 1: 下载mysql的Java连接程序 2: 解压目录下的mysql-connector-java-5.0.24-bin.jar文件就是连接MySql ...

  6. C#中导出EXCEL服务器端不用安装OFFICE

    在实际开发过程中,有时候服务器端没安装OFFICE,你和服务器管理员去商量安装个OFFICE的时候,管理员很倔犟的不给你安装的时候,这个时候就可以考虑我这个方法是实现导出EXCEL了.如果你导出的EX ...

  7. oracle老是出现监听错误

    解决方法之一: 点击开始-->选择程序--->选中你安装的oracle版本-->选中配置与移植工具-->选中Net Configuration Assistant-->在 ...

  8. Windows驱动手动卸载与安装

    彻底卸载的流程 1.删除C:\windows\inf\oem.inf路径下的所有oem文件 2.删除c:\windows\system32\drivers路径下对应的sys文件 3.(重要) 第一步: ...

  9. tesseract 4.0 编译安装(CentOS)

    1.安装依赖工具 yum install autoconf automake libtool libjpeg-devel libpng-devel libtiff-devel zlib-devel 2 ...

  10. where T:new() 是什么意思

    经常看到方法后面加where T:new() ,下面来解释下 比如如下这个方法   protected static T CreateNewInstance<T>() where T :  ...