Django入门与实践-第19章:主题回复(完结)

http://127.0.0.1:8000/boards/1/topics/1/reply/
http://127.0.0.1:8000/boards/1/topics/1/
#myproject/urls.py
url(r‘^boards/(?P<pk>\d+)/topics/(?P<topic_pk>\d+)/reply/$‘,views.reply_topic, name=‘reply_topic‘),

#boards/forms.py
from .models import Post
class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = [‘message‘, ]

#一个新的受 @login_required 保护的视图,以及简单的表单处理逻辑
#boards/views.py
from .forms import PostForm
@login_required
def reply_topic(request, pk, topic_pk):
    topic = get_object_or_404(Topic, board__pk=pk, pk=topic_pk)
    if request.method == ‘POST‘:
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.topic = topic
            post.created_by = request.user
            post.save()
            return redirect(‘topic_posts‘, pk=pk, topic_pk=topic_pk)
    else:
        form = PostForm()
    return render(request, ‘reply_topic.html‘, {‘topic‘: topic, ‘form‘: form})

<!--templates/reply_topic.html-->
{% extends ‘base.html‘ %}
{% load static %}
{% block title %}Post a reply{% endblock %}
{% block breadcrumb %}
    <li class="breadcrumb-item"><a href="{% url ‘home‘ %}">Boards</a></li>
    <li class="breadcrumb-item"><a href="{% url ‘board_topics‘ topic.board.pk %}">{{ topic.board.name }}</a></li>
    <li class="breadcrumb-item"><a href="{% url ‘topic_posts‘ topic.board.pk topic.pk %}">{{ topic.subject }}</a></li>
    <li class="breadcrumb-item active">Post a reply</li>
{% endblock %}
{% block content %}
    <form method="post" class="mb-4">
        {% csrf_token %}
        {% include ‘includes/form.html‘ %}
        <button type="submit" class="btn btn-success">Post a reply</button>
    </form>
    {% for post in topic.posts.all %}
    <div class="card mb-2">
        <div class="card-body p-3">
            <div class="row mb-3">
                <div class="col-6">
                    <strong class="text-muted">{{ post.created_by.use rname }}</strong>
                </div>
                <div class="col-6 text-right">
                    <small class="text-muted">{{ post.created_at }}</small>
                </div>
            </div>
        {{ post.message }}
        </div>
    </div>
    {% endfor %}
{% endblock %}
<!--templates/topic_posts.html(-->

{% for post in topic.posts.all %}
    <div class="card mb-2 {% if forloop.first %}border-dark{% endif %}">
        {% if forloop.first %}
    <div class="card-header text-white bg-dark py-2 px-3">{{ topic.subject }}</div>
    {% endif %}
    <div class="card-body p-3">
        <!-- code suppressed -->
    </div>
    </div>
{% endfor %}

原文地址:https://www.cnblogs.com/larken/p/9564814.html

时间: 2024-08-30 00:34:14

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

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:8000/boards/3/ <!--static/css/app.css--> .navbar-brand { font-family: 'Peralta', cursive; } <!--templates/base.html--> {% load static %}<!D

Django入门与实践-第20章:QuerySets(查询结果集)(完结)

http://127.0.0.1:8000/boards/1/ #boards/models.py from django.utils.text import Truncator class Topic(models.Model): # ... def __str__(self): return self.subject class Post(models.Model): # ... def __str__(self): truncated_message = Truncator(self.me

Django入门与实践-第21章:迁移(完结)

http://127.0.0.1:8000/boards/1/ python manage.py migrate #boards/models.py class Topic(models.Model): views = models.PositiveIntegerField(default=0) # <- here python manage.py makemigrations python manage.py migrate #boards/views.py def topic_posts(r

Django入门与实践 17-26章总结

Django入门与实践-第17章:保护视图 Django 有一个内置的视图装饰器 来避免它被未登录的用户访问: 现在如果用户没有登录,将被重定向到登录页面: 现在尝试登录,登录成功后,应用程序会跳转到原来所在的位置. Django入门与实践-第18章:访问已登录用户 现在我么可以改进 new_topic 视图,将发布主题的用户设置当前登录的用户,取代之前直接从数据库查询出来的第一个用户, 之前这份代码是临时的,因为那时候还没有方法去获取登录用户,但是现在可以了: 有两个关键字参数,pk用于唯一标

敏捷软件开发:原则、模式与实践——第19章 类图

第19章 类图 19.1 基础知识19.1.1 类 类一般表示成下面的样子: 分成格间的类图标以及对应的代码 注意类图标中变量和函数名前面的符合.(-)表示private:(#)表示protected:(+)表示public. 19.1.2 关联 类之间的关联表示的是那些持有对其他对象引用的实例变量.如phone和Button之间的关联: 一个PhoneBook对象和多个PhoneNumber对象相连(星号表示许多): 19.1.3 继承 UML中所有的箭头都指向源代码依赖的方向.类和类之间的继

python编程:从入门到实践----第四章&gt;操作列表

一.遍历整个列表 1-1.假设有一个魔术师名单,需要将其中每个魔术师的名字都打印出来. # 用for循环来打印魔术师名单中的名字 magicians=['alice','david','carolina'] for magician in magicians: #这里面的magician和magicians是便于让读者得知for循环在哪个列表中进行遍历 print(magician) #输出结果: alice david carolina 解析以上代码: a. 先定义一个列表 b. 定义一个fo

Django入门与实践 1-16章总结

注意事项:随时备份.随时记录.从宏观到微观 不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之:学至于行之止矣 安装 Python 3.6.2 pip install django==1.11.4 django-admin startproject myproject python manage.py runserver http://127.0.0.1:8000 使用组合键 Control + C 来终止开发服务器. django-admin startapp boards setting

py从入门到实践 第四章

4.1 遍立列表 ~= shell 数组————————————————————————————————————————————thrink = ['link','path','pwd']for i in thrink: print(i)————————————————————————————print缩进 = 4个空格循环后不必要的缩进magicians = [ 'alice','david', 'carolina'] for magician in magicians: print(magi

django入门与实践 - 关于升级到django 3.7,三种模板超链接配置(编辑中)

第一种方法: 在myblog/urls.py模块中: from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('blog1/', include(('blog1.urls', 'a'), namespace='blogg')), #'a'可以为任意字符,但不能为空 ] myblog/urls.py 在bl