初次接触django的开发者,犯的一个常见错误就是转义。
何谓转义?就是把html语言的关键字过滤掉。例如,<div>就是html的关键字,如果要在html页面上呈现<div>,其源代码就必须是<div>
默认情况下,django自动为开发者提供escape功能,即在html代码render之前,先进行转义,然后再呈现出来。这样的话,我们如果想输出一个链接,被转义之后,可能就无法得到我们想要的结果。
例如,下面的method,如果用户是匿名用户,则输出“匿名用户”,否则,输出一个链接,指向用户的profile:
def get_username(self):
return “<a href=’/accounts/%s/’>%s</a>” %(self.user.id, self.user.username)
在template文件中,如果这样使用上面的方法:
{{topic.get_username}}
这样,输出的结果不是一个链接,而是上面链接转义后的原文。我们无法得到我们想要的结果。
有以下几种方法解决自动转义的问题:
1、filter中
修改filter函数的is_safe属性:
@register.filter
def myfilter(value):
return value
myfilter.is_safe = True
如果你需要更复杂一些,可以亲自来处理escape属性。
首先,设置filter的need_autoesacpe属性为True(默认为False),这个参数告诉django,该filter需要一个传递一个autoesacape的参数,标示是否需要进行转义处理,如果为True,则转义,反之则反。完整的例子如下:
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
def initial_letter_filter(text, autoescape=None):
first, other = text[0], text[1:]
if autoescape:
esc = conditional_escape
else:
esc = lambda x: x
result = ‘<strong>%s</strong>%s’ % (esc(first), esc(other))
return mark_safe(result)
initial_letter_filter.needs_autoescape = True
2、template中
去掉template中的自动转义可以使用filter safe,也可以使用auotescape标签,还可以修改render的autoescape属性。
使用safe filter:
This will be escaped: {{ data }}
This will not be escaped: {{ data|safe }}
使用autoescape标签:
Auto-escaping is on by default. Hello {{ name }}
{% autoescape off %}
This will not be auto-escaped: {{ data }}.
Nor this: {{ other_data }}
{% autoescape on %}
Auto-escaping applies again: {{ name }}
{% endautoescape %}
{% endautoescape %}
如果在autoescape的标签中include 其他的tags,autoescape的属性将被子tags继承。
修改Context类的autoescape属性:
def render(self, context):
# …
new_context = Context({‘var’: obj}, autoescape=context.autoescape)
注:autoescape标签的优先级高于Context类的autoescape属性,即如果Context中autoescape设置与模板中autoescape标签冲突,则使用autoescape标签的autoescape设置值。
>>> from django import template
>>> H=’{% autoescape off %}{{div}}{% endautoescape %}’
>>> c = template.Context({’div’:”<div>”}, autoescape=True)
>>> template.Template(H).render(c)
u’<div>’
>>>
>>> H=’{% autoescape on %}{{div}}{% endautoescape %}’
>>> c = template.Context({’div’:”<div>”}, autoescape=True)
>>> template.Template(H).render(c)
u’<div>’
>>> H=’{% autoescape on %}{{div}}{% endautoescape %}’
>>> c = template.Context({’div’:”<div>”}, autoescape=False)
>>> template.Template(H).render(c)
u’<div>’
>>>
3、使用方法函数mark_safe
使用mark_safe函数标记后,django将不再对该函数的内容进行转义,上面的get_username可以修改为:
from django.utils.safestring import mark_safe
def get_username(self):
return mark_safe(”<a href=’/accounts/%s/’>%s</a>” %(self.user.id, self.user.username))
分享到:
相关推荐
关闭django转义的方法有如下两种: 1.关闭单个模版变量的转义: 利用”|safe” 过滤器告诉django这个变量不需要转义, 如模版中:{{ data|sage }} 2.利用django模版标记关闭html或js块转义 {% autoescape off %} ...
总结来说,Django结合Bokeh提供了一种高效且灵活的方式,可以在Web应用中实现复杂的数据可视化。通过Python编写后端逻辑,利用Bokeh的强大功能生成交互式图表,最后将其嵌入Django模板,用户就能在浏览器中体验到...
Django提供了诸如`{{ value|escape }}`的过滤器来自动转义HTML,以及`form.is_valid()`来确保表单数据的安全性。 通过以上步骤,我们可以构建一个功能完善的用户登录注册系统,结合Django的强大功能和丰富的生态...
在模板标签中,`{% autoescape on|off %}` 可以控制模板是否自动转义变量内容,防止跨站脚本攻击(XSS)。`{% block %}`、`{% endblock %}`可以定义模板中的可替换块。`{% cycle %}`标签用于在模板中循环切换不同的...
3. **XSS防护**:Django的模板系统默认对输出内容进行转义,防止跨站脚本攻击。 4. **SQL注入防御**:ORM层自动处理SQL语句的参数化,防止恶意SQL注入。 **Django的其他特性** 1. **管理后台(Admin)**:Django...
Django提供了一些内置的防护机制,如自动转义HTML,使用CSRF令牌等。 以上是构建这个电影小网站所需的关键知识点。通过这个项目,你可以深入了解Django框架的使用,同时掌握Web开发的基本流程和安全实践。
3. **XSS防护**:Django的模板系统自动对输出进行转义,防止跨站脚本攻击。 4. **SQL注入防护**:通过使用ORM(对象关系映射),Django自动处理SQL语句,避免直接拼接字符串导致的SQL注入漏洞。 **Django的扩展性...
总结,本文详细介绍了如何在Django项目中集成FCKeditor,从安装、配置到在模型和模板中的使用,以及可能的扩展和自定义。通过这些步骤,你可以为Django后台提供一个功能强大的富文本编辑界面,提升用户的编辑体验。...
### Django 实现 HttpResponse 返回 JSON 数据为中文 #### 背景与问题介绍 在使用 Django 框架开发 Web 应用程序时,经常会遇到需要通过 API 接口返回 JSON 数据的需求。对于国际化应用而言,支持多语言尤其是中文...
Django提供了许多内置的安全功能,如CSRF保护和自动转义HTML内容,但开发者仍需确保正确配置和使用。 8. **部署与测试**:完成开发后,需要将应用部署到服务器上,常见的选择有Apache、Nginx等。同时,进行充分的...
根据给定的文件信息,以下是从“Django绝对简明教程.pdf”中提炼出的关键知识点,涵盖的内容包括Django框架的基础概念、视图处理、URL配置、模板使用、过滤器应用以及模型数据库操作。 ### Django框架简介 Django...
### Django 教程详解 #### 一、Django 框架概述 Django 是一个高级的 Python Web 开发框架,旨在鼓励快速开发并遵循 DRY(Don't Repeat Yourself)原则。它内置了许多功能,包括认证、管理界面、缓存框架、ORM...
- **escape/linebreaks**: 转义HTML标记或转换换行符为` `标签。 - **addslashed**: 在字符串中的引号前后添加斜杠。 - **length**: 返回序列的长度。 #### 七、Model数据库 - **功能**: Django的ORM(对象...
Django绝对简明手册是一个关于Django框架的详细指南,旨在帮助开发者快速理解和掌握Django的基本概念和使用方法。Django是一个用Python编写的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式,强调“约定...
在HTML模板中,`|safe`过滤器告诉Django不要对传递的数据进行HTML转义,因为这里的数据是用于JavaScript而不是直接显示在页面上。 对于JavaScript处理接收到的数据,有多种遍历和访问数组和对象的方法。例如,在...
1. **防止跨站脚本攻击(XSS)**:Django的模板系统具有自动转义机制,有效防止恶意代码注入。 2. **防止跨站请求伪造(CSRF)**:Django提供CSRF保护,确保只有来自信任源的表单提交才会被处理。 3. **密码哈希和...
它默认包含了跨站请求伪造(CSRF)保护和输出转义等重要的安全措施。Django还支持SSL和TLS协议,并且可以通过中间件配置来增强安全性。 Django还支持国际化和本地化,能够处理多语言的网站。开发者可以为不同的语言...
Django提供了一些内置的安全措施,如自动转义HTML,以及使用安全的模板标签和过滤器。我们还需要在处理用户输入时进行验证和清理,确保数据安全。 7. **其他功能**:除了基本的博客功能,描述中还提到了天气显示。...
11. 安全性:系统需要考虑防止SQL注入、跨站脚本攻击等安全问题,通过使用Django提供的安全机制,如预编译SQL、HTML转义等,确保用户数据的安全。 以上就是“Python基于Django在线考试系统设计”的主要知识点。这个...