django框架之7:模板操作之URL标签与补充标签

news/2024/6/19 6:13:13 标签: django

URL标签:

在模版中,我们经常要写一些url,比如某个a标签中需要定义href属性。当然如果通过硬编码的方式直接将这个url写死在里面也是可以的。但是这样对于以后项目维护可能不是一件好事。因此建议使用这种反转的方式来实现,类似于django中的reverse一样。
在网页中的呈现就是通过链接进行页面跳转
通过:跳转,带参数页面的跳转和多个参数页面跳转的方式展开
首先:跳转的定义从HTML定义,语句:

<a href="/news/">进入新闻主页</a>  # 跳转到指定路由
<a href= "{% url 'index' %}" >进入新闻主页</a>   # 定义路由index  跳转到index中,此时即使路由地址改了,也不用再修改index了,比较方便

与{% url ‘index’ %}对应的是要从urls.py定义urls的值
path(’’,views.index,name=‘index’),

从views定义 index视图

def index(request):
    return render(request,'index.html')

如果要传入参数news_id:就需要在render内传入context值,在context内定义‘news_id’字段,
传入参数的方式分为位置传参与键值传参:

<a href= "{% url 'news_detail' 1 3 %}" >进入新闻详情页</a>  # 位置传参
<a href= "{% url 'news_detail' news_id=2 type_id=4 %}" >进入新闻2详情页</a>  # 键值传参

如果是多个参数,只需要用空格隔开,不需要用逗号隔开
如果需要传入参数get ?参数,需要在花括号外面操作,里面已经将url做好了连接反转,只需要进行连接即可
比如:

<a href= "{% url 'news_detail' news_id=2 type_id=4 %}?name=cheney" >进入新闻2详情页</a>

而在urls中是要写传递参数的,不然HTML也不知道怎么连接
比如:

path('news_detail/<news_id>/<type_id>/',views.news_detail,name='news_detail'),

注:在这一切操作开始之前,配置好settings中的'DIRS': [os.path.join(BASE_DIR,'templates')],
代码:
urls:

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('news/', include('news.urls')),
]

news.urls:

from django.urls import path
from . import views

urlpatterns = [
    path('',views.index,name='index'),
    path('news/',views.news,name='news'),
    path('news_detail/<news_id>/<type_id>/',views.news_detail,name='news_detail'),
]

news.views

from django.shortcuts import render
# 只使用render的渲染方式
# Create your views here.

def index(request):
    return render(request,'index.html')

def news(request):
    return render(request,'news.html')

def news_detail(request,news_id,type_id):
    name = request.GET.get('name')  #  不用动路由
    context = {
        'news_id':news_id,
        'type_id':type_id,
        'name':name
    }
    return render(request,'news_detail.html',context=context)

news.html:

from django.shortcuts import render
# 只使用render的渲染方式
# Create your views here.

def index(request):
    return render(request,'index.html')

def news(request):
    return render(request,'news.html')

def news_detail(request,news_id,type_id):
    name = request.GET.get('name')  #  不用动路由
    context = {
        'news_id':news_id,
        'type_id':type_id,
        'name':name
    }
    return render(request,'news_detail.html',context=context)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>图书首页</p>
</body>
</html>

news_detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>新闻详情页面</p>
<p>这是第{{ news_id }}条新闻</p>
<p>这是第{{ type_id }}条关于{{ name }}的新闻</p>
</body>
</html>

操作:
在这里插入图片描述
此时,点击其中的页面,会自动跳转到相关的页面

在这里插入图片描述

with标签:

上下文管理
只能在当前的with标签里使用才有效果

<p>
    {% with name=person.0 %}
    {{ name }}
    {% endwith %}
    {% with person.1 as name%}
    {{ name }}
    {% endwith %}
    {{ name }}
</p>

其中包含with的两种写法,但是在结束with之后,name不再起作用

关闭转义

{% autoescape off  %}

对于:

context = {
        'person':['cheney','jerry'],
        'net': '<a href="https://www.baidu.com">百度</a>',
    }
<p>
    {{ net }}
    {% autoescape off %}
    {{ net }}
    {% endautoescape %}
</p>

如果直接输出,则输出的就是

<a href="https://www.baidu.com">百度</a>

在这里插入图片描述


http://www.niftyadmin.cn/n/1684559.html

相关文章

基于matlab的数字图像处理---图像滤波(高斯噪声、椒盐噪声,高斯滤波、中值滤波)

对图像进行添加高斯噪声、椒盐噪声处理之后&#xff0c;使用高斯滤波、中值滤波方式对添加噪声的图像进行滤波处理&#xff0c;实现程序如下&#xff1a; clc P imread(原始图像.jpg); % 读入图像 figure imgrgb2gray(P); imwrite(img,甲.png); imshow(img) title(原始图像)i…

串口监视工具百度云免费下载

链接 链接&#xff1a;https://pan.baidu.com/s/1zPg0nO9a6LHk6klEx9eKsQ 提取码&#xff1a;3snk 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦–来自百度网盘超级会员V5的分享

django框架学习之8:模板过滤器

所谓过滤器就是指对模板中的某些内容进行相关处理和过滤&#xff0c;要有模板过滤器先要有模板&#xff0c; def news(request):context {person:[cheney,jerry],net: <a href"https://www.baidu.com">百度</a>,num: 5,now:datetime.now(),#info:1234s…

基于matlab的数字图像处理---图像的锐化与边缘提取

相关原理&#xff1a; 1、频率提升——将原图像与边缘信息加权&#xff1b; 2、高频增强——改变滤波模板直接实现边缘增强&#xff1b; 3、一阶算子具备梯度方向信息&#xff0c;但是对丰富的高频纹理信息不敏感&#xff0c;适合于需要对边缘后续处理的应用&#xff1b; 4、 二…

django框架之9:模板结构优化一种是include模板(直接复制)一种是extends,导入和继承可以添加东西

模板的结构优化&#xff0c;也可以说是模板的继承修改&#xff0c; 引入模板的操作&#xff1a; 有时候一些代码是在许多模版中都用到的。如果我们每次都重复的去拷贝代码那肯定不符合项目的规范。一般我们可以把这些重复性的代码抽取出来&#xff0c;就类似于Python中的函数一…

虚拟串口工具百度云免费下载

链接 链接&#xff1a;https://pan.baidu.com/s/1yQyv67Ux2O8mdGkQfaYgqg 提取码&#xff1a;4b3w 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦–来自百度网盘超级会员V5的分享

VHDL---基于拨位开关的音符发声

理解蜂鸣器奏乐的实现原理&#xff0c;将三个拨位开关所代表的0~7&#xff0c;然后将拨位开关所代表的结果作为音频输出的选择条件&#xff1b;实现程序主要由&#xff1a;顶层文件、分频元件、蜂鸣器元件构成。顶层文件&#xff1a; library ieee; use ieee.std_logic_1164.a…

END-TO-END OPTIMIZED IMAGE COMPRESSION论文阅读

END-TO-END OPTIMIZED IMAGE COMPRESSION 文章目录 END-TO-END OPTIMIZED IMAGE COMPRESSION单词重要不重要 摘要&#xff1a; 单词 重要 image compression 图像压缩 quantizer 量化器 rate–distortion performance率失真性能 不重要 a variant of 什么什么的一个变体 …