Django(四)_HTML页面跳转,数据传递

一.Templates

当需要使用template模板页面时,Django不光会在当前app下查找Template文件夹下的模板文件,他会查找整个Django项目下的所有Template文件夹下的模板文件。

但如果两个不同app下有同名模板文件呢,为了避免这种情况:
在app下新建这样一段目录,将HTML文件都存放在此处,这样就不会出现查错的情况了
在这里插入图片描述

补充一下我们创建的这个html,改名成index.html吧,因为之前的view跳转就是跳的index
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1">
        <tr>
            <td>name</td>
            <td>age</td>
        </tr>
        {% if login_list %}
            {% for login in login_list %}
                <tr>
                    <td>{{ login.name }}</td>
                    <td>{{ login.age }}</td>
                </tr>
            {% endfor %}
        {% endif %}
    </table>

</body>
</html>

然后要在view里获取所有的对象,因为这里的html页面要展示,这里的context是字典形式数据
在这里插入图片描述

def index(request):
    # return HttpResponse('Hello World!')
    login = Login.objects.all()
    from django.template import  loader
    template = loader.get_template('login/index.html')
    context = {
        'login_list' : login
    }
    return HttpResponse(template.render(context,request))

在这里插入图片描述
在这里插入图片描述

注意在html里使用django的语法,如果是for 或者 if,就用{% %}来包裹,如果只是单纯的数据,用双括号{{}}就行。

view里的index函数还可以再简化一下,使用render方法,render方法里可以传递的几个参数可以自行搜索,render用到的频率非常高
在这里插入图片描述

def index(request):
    # return HttpResponse('Hello World!')
    # login = Login.objects.all()
    # from django.template import  loader
    # template = loader.get_template('login/index.html')
    # context = {
    #     'login_list' : login
    # }
    # return HttpResponse(template.render(context,request))
    login = Login.objects.all()
    context = {
        'login_list' : login
    }
    return render(request,'login/index.html',context)

二.定义一个详情页,然后跳转进入

跳转之前我写过:https://blog.csdn.net/qq_38175040/article/details/104684355
先定义一下url
在这里插入图片描述
然后去具体写detail函数
在这里插入图片描述
新建一个detail.html模板页面
在这里插入图片描述
在index页面里放入链接,点击链接跳转到detail页面,写法与我之前的博客类似
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1">
        <tr>
            <td>name</td>
            <td>age</td>
        </tr>
        {% if login_list %}
            {% for login in login_list %}
                <tr>
                    <td><a href="{% url 'login:detail' login.id %}">{{ login.id }}</a>></td>
                    <td>{{ login.name }}</td>
                    <td>{{ login.age }}</td>
                </tr>
            {% endfor %}
        {% endif %}
    </table>

</body>
</html>

在这里插入图片描述

三.DjangoPOST请求

之前的包括访问数据库,打印整张用户表,根据id查询单条数据用户,都是GET请求,请求获取到数据然后展示。

这边尝试一下在html页面里进行操作,点击按钮,然后向数据表中添加一条数据
新建一个view方法
在这里插入图片描述

然后写一下url
在这里插入图片描述

再把html简单的写一下,这个html里就一个表单,点击按钮以post形式提交表单
在这里插入图片描述

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{% url 'login:add_post' %}" method="post">
        {% csrf_token %}
        name:<input name="name"></br>
        age:<input name="age"></br>
        <input type="submit" value="submit">
    </form>

</body>
</html>

最后再来详细写一下view里的方法
首先如果是以GET请求调用view里的add_post方法,那就将页面跳转到刚刚写好的add_post.html页面,展示这个页面
在这里插入图片描述
在url里输入http://127.0.0.1:8080/login/add/以访问静态页面
在这里插入图片描述

其次是POST,add_post.html里的表单提交时,以post方法提交,并且调用的也是view 里的add_post函数
在这里插入图片描述

def add_post(request):
    if request.method == 'GET':
        return render(request,'login/add_post.html',{})
    elif request.method =='POST':
        name = request.POST['name']
        age = request.POST['age']
        login = Login(name = name,age=age)
        login.save()
        login_list = Login.objects.all()
        context = {
            'login_list':login_list
        }
        return render(request,'login/index.html',context)
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值