使用标记将python字符串插入Django模板上下文

时间:2018-07-07 00:06:27

标签: python django python-2.7 django-templates

如果我在.html模板中渲染静态图像,则它可以工作。但是,如果我将静态标记字符串作为字典值提供给模板(上下文),它将无法正常工作。这似乎与字符串格式有关,并且不允许我按照需要的方式使用{%%}。我试过了:
1. .format()
2.转义百分号
3.原始字符串
4.串联
5.自动转义
6. |安全
和其他一些东西

基本上,我正在用'''{%%}'''在view.py中构造一个多行字符串,然后使用该字符串作为上下文呈现模板。 Python 2。

更新

简单的无效示例:

view.py

def index(request):
    image_insert = ''
    images = ['image1.jpg', 'image2.jpg', 'image3.jpg']
    for image in images:
        image_insert += '<img src="{}">'.format(image)
    context = {'insert': image_insert}
    template = loader.get_template('index.html')
    return HttpResponse(template.render(context, request))

index.html

{% load static %}
<!DOCTYPE html>
<html>
  <head>
    <title>Basic HTML File</title>
  </head>
  <body>
    First Image
    <img src={% static "image.jpg" %}>
    Second Image  <!-- does not work -->
    {{ image_insert | safe }}
  </body>
</html>

页面来源:

<!DOCTYPE html>
<html>
  <head>
    <title>Basic HTML File</title>
  </head>
  <body>
    <img src=/static/mqdefault.jpg>
    Second Image
    <img src="image1.jpg"><img src="image2.jpg"><img src="image3.jpg">
  </body>
</html>

显然,两者之间存在差异。如果有所不同,这是Django 1.11 btw。

2 个答案:

答案 0 :(得分:1)

工作代码:

def index(request):
    context = {'image_insert': "image.jpg"}
    template = loader.get_template('index.html')
    return HttpResponse(template.render(context, request))

index.html

{% load static %}
<!DOCTYPE html>
<html>
  <head>
    <title>Basic HTML File</title>
  </head>
  <body>
    First Image
    <img src="{% static "image.jpg" %}">
    Second Image  <!-- does not work -->
    <img src="{% static image_insert %}">
  </body>
</html>

答案 1 :(得分:1)

您还可以通过如下方式从视图传递img源来实现此目的:

views.py

sequelize.query(`
 UPDATE person SET "fullName"="firstName" || ' ' || "lastName" 
 where "fullName" is null
`);

index.html

from django.contrib.staticfiles.templatetags.staticfiles import static

def index(request):
    context = {'image_src': static("image.jpg")}
    template = loader.get_template('index.html')
    return HttpResponse(template.render(context, request))

更新:多张图片

您可以生成包含多个图像的标记,并将其传递到<!DOCTYPE html> <html> <head> <title>Basic HTML File</title> </head> <body> <img src="{{ image_src }}"> </body> </html> 中,如在context中所示:

views.py

views.py

现在,您更新后的from django.contrib.staticfiles.templatetags.staticfiles import static def index(request): images = [static('image1.jpg'), static('image2.jpg'), static('image3.jpg')] images_html = "".join([ "<img src={image}>".format(image=image) for image in images ]) context = {'images_html': images_html)} template = loader.get_template('index.html') return HttpResponse(template.render(context, request)) 将是: index.html

index.html

希望有帮助。