Django——模板基础(前后端不分离)、标签、过滤器

目录

什么是模板

模板内容

准备工作

创建模板

过滤器

capfirst

default

标签

for

if

if...elif...else

url

html转义

没转义之前:

转义:

要想使它不转义——加上safe

通过开关来控制转义——autoescape

扩展:


什么是模板

Django的模板是静态的html文件,它只决定了一个页面的样式或外观。 它需要视图View传递过来的变量 (Variable)或内容对象 (Context object)才能被渲染成一个完整的页面。

模板内容

准备工作

  • 中终端输入 django-admin startapp django-admin startapp Item_1
  • 在项目目录在setting.py文件下的INSALLD_APPS中添加应用项目Item_1
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'Item_1',
]

  • 在应用项目Item_1文件下新建一个urls.py文件,配置如下:
    from django.urls import path
    from .views import hello
    urlpatterns = [
        path('hello/',hello),  #先创建一个hello的路径名,看看能不能跑成功,避免后续错误不好找
    
    ]
  • 在Item_1项目下的views.py文件下写入:
    from django.shortcuts import render
    from django.http import HttpResponse
    # Create your views here.
    
    def hello(request):
        return HttpResponse('你好呀,开始新路程')
  • 在找到项目目录的ulrs.py文件,添加Items的路径

        

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

        在运行,在网页的路径中输入Item_1/hello/  则可看到:

创建模板

在应用项目文件下建一个template目录

在templates目录下创建一个.html的文件,我的是happy.html。

在Item_1文件下的views.py文件下添加happy.html的路径,还可以添加参数,如下:

(我就直接修改hello的函数了)

在happy.html文件下,输入{{}}的语法,则可以调用view.py里面的参数,如下:

大家好,我叫{{ name }},今年{{ age }}岁,爱好{{ hoody }}

则刷新页面可就看到:

过滤器

参考内置模板标签和过滤器 | Django 文档 | Django (djangoproject.com)

内置过滤器相当于python的内置函数(eg:lower()可以将大写字母转换成小写字母)

capfirst

将值的第一个字符大写。如果第一个字符不是字母,这个过滤器就没有效果。

语法:

{{ value|capfirst }}  

如果 value 是 "django",则输出为 "Django"

在views.py文件下创建一个函数,我的是first_big函数:

在Item_1文件下的urls.py文件下加入first_big的路径名

from django.urls import path
from .views import hello,first_big
urlpatterns = [
    path('hello/',hello),
    path('first_big/',first_big)

]

在templates文件下建一个.html文件,我的是first_bigword.html文件,同view.py中的first_big中引用的.html文件一样。

在first_bigword.html中写入:

{{ word|capfirst }}

则刷新页面,则可看见:

则可看见原来的o me you   变为  O me you

default

默认值,如果有值,则使用该值,没有则使用默认值

语法:

{{ value|default:"nothing" }}

如果 value 是 "" (空字符串),输出将是 nothing

我就不创建.html文件了,就在first_bigword.html文件在使用改语法。

在views.py文件的first_big函数中添加参数value

在first_bigword.html中使用语法:

刷新页面,可看见;

如果改变value的值为空,则刷新页面,看到:

标签

参考内置模板标签和过滤器 | Django 文档 | Django (djangoproject.com)

在应用目录Item_1下的views.py文件下创建一个函数:

def for_test(request):
    return render(request,'for_text.html',{'li':[1,2,3,4,5],'value':True})

在Items.py文件下的urls.py文件在添加for_test的路径名

在templates目录下新建一个叫for_text.html的文件

for

语法:

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

在for_text.html文件在写入:

运行,在打开的页面的路径中输入/Item_1/for_test/  则可看见:

if

在for_text.html文件中写入:

刷新页面:

if...elif...else

在views.py文件中for_test函数中添加一一些参数:

def for_test(request):
    return render(request,'for_text.html',{'li':[1,2,3,4,5],
                                           'value':1,
                                           'student':{'stu':'03','name':'OPQ','gender':'男','class':'一年级'}
                                           }

在在for_text.html文件中写入:

<ul>
    {% for i in li %}
    <li>第{{ i }}个标签</li>
    {% endfor %}
</ul>



<div>
    {% if value %}
         value:{{ value }}
    {% endif %}
</div>

<div>
    {% if value == 1 %}
        {% for i,j in student.items %}
            <p>学生的{{ i }}:{{ j }}</p>
        {% endfor %}
    {% elif value > 3%}
        学生不是一年级的学生
    {% else %}
        学生以及毕业
    {% endif %}
</div>

刷新页面:

当value为4时

当value为2时:

url

语法:

{% url 'some-url-name' %}

利用url语法可以返回some-url-name的路径  等同于reverse()  ,同一种意思只是在不同语言在的表达形式不同。

在views.py中创建一个函数:

def url_test(request):
    print(reverse('url_tag')) #reverse能返回'url_tag'的路径
    return render(request,'url_text.html')

在urls.py文件在添加url_test的路径名,并起一个名字为:url_tag

from django.urls import path
from .views import hello,first_big,for_test,url_test
urlpatterns = [
    path('hello/',hello),
    path('first_big/',first_big),
    path('for_test/',for_test),
    path('url_test/',url_test,name='url_tag')
]

在templates的目录下新建一个url_text.html的文件,并写入:

运行,打开页面,在页面的路径在写入/Item_1/url_test/  可看见:

在运行栏中有:

html转义

对应一些有特殊含义的代码,django为了我们的安全考虑,将这些有非法含义的内容直接给我们转义拼接成普通的字符串,让它去显示在我们的前端。

没转义之前:

在views.py文件中:

def escape_test(request):
    return render(request,'escape_text.html')

在urls.py文件中:

在templates目录下新建一个escape_text.html的文件,

运行,页面中呈现:

转义:

在views.py文件中

def escape_test(request):
    word="<script>alert('you kown? ')</script>"
    return render(request,'escape_text.html',{'word':word})

 在escape_text.html文件中

运行,打开页面,在路径中添加/Item_1/escape_test/   则页面显示:

要想使它不转义——加上safe

 在escape_text.html文件中:

我是:  {{ word |safe}}

刷新页面,则页面呈现:

注意:默认是自动转义的。

通过开关来控制转义——autoescape

控制当前的自动转义行为。该标签以 on 或 off 作为参数,决定块内是否有自动转义行为。此区块以 endautoescape 结束标签关闭。

语法:

{% autoescape on %}
    {{ body }}
{% endautoescape %}

在escape_text.html文件中:

刷新页面:

将on改为off,则刷新页面:

扩展:

我们还可以将templates创建在与项目目录,应用目录同级的根目录下面。(templates可另取他名)

不过要在项目目录的setting.py中对TEMPLATES进行设置

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],#导入os模块,加上templates路径
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

eg:我在根目录下面,与manage.py文件同级创建一个total_templates目录

在项目目录的setting.py中对TEMPLATES进行设置

将'DIRS':[ ]改为:

'DIRS': [os.path.join(BASE_DIR,'total_templates')],

同上操作:

在views.py文件下:

def school_test(request):
    return render(request,'school.html',{'school':'阳光小学'})

在urls.py文件下:

添加:

path('school_test/',school_test)

在total_templates目录的目录下创建一个school.html的文件:里面输入:

我的学校:{{ school }}

在页面的路径在添加/Item_1/school_test/  则呈现:

这样也是可以使用的。

如果在total_templates目录下在创建一个templates_1的目录,在templates_1的目录下创建school.html的文件,则运行时发现我们找不到school.html的文件。则:

我们要在views.py文件下的school_test函数中的"school.html"之前添加上他的前级目录templates_1

def school_test(request):
    return render(request,'templates_1\school.html',{'school':'阳光小学'})

这样我们就能找到school.html文件了。

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目系统结构——前后端分离是一种常见的Web应用程序开发模式,它采用了一种分离前端后端的策略,将应用程序分为两个独立的部分:前端后端。这种模式通常用于构建复杂的应用程序,如企业级管理系统、在线购物平台等。 以下是项目系统结构——前后端分离的主要组成部分: 前端: 1. 客户端应用程序:通常使用JavaScript框架(如React、Vue、Angular等)或前端Web框架(如Django、Flask等)开发,用于处理用户界面、数据请求和响应等功能。 2. 静态资源:包括CSS、图片、JavaScript等静态资源文件,通常存储在Web服务器上,供前端应用程序使用。 后端: 1. API服务:提供RESTful或GraphQL风格的API接口,用于处理业务逻辑和数据操作。后端服务通常使用服务器端语言(如Python、Java、Node.js等)编写,并使用数据库存储数据。 2. 数据库:用于存储和管理应用程序的数据,通常使用关系型数据库(如MySQL、PostgreSQL等)或非关系型数据库(如MongoDB、Redis等)。 前后端分离的优点: 1. 开发效率高:前端后端可以由不同的团队或个人独立开发,减少了沟通和协作的难度。 2. 可扩展性好:前后端分离的应用程序可以根据需要灵活地添加新的前端后端组件,提高了系统的可扩展性。 3. 灵活性高:前端可以使用不同的技术栈,如移动端应用程序、小程序等,提高了应用的灵活性。 前后端分离的缺点: 1. 安全性问题:前后端分离的应用程序可能存在安全风险,如跨站脚本攻击(XSS)和SQL注入等。因此,需要采取适当的措施来保护应用程序的安全性。 2. 集成问题:前后端分离的应用程序需要将数据从后端传输到前端,需要处理数据格式转换、数据验证等问题。 3. 调试和测试难度大:前后端分离的应用程序需要分别进行调试和测试,增加了开发和测试的难度。 总之,项目系统结构——前后端分离是一种灵活、可扩展的开发模式,适用于构建复杂的应用程序。在开发过程中,需要关注安全性和集成问题,并采取适当的措施来确保应用程序的稳定性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值