在注入的HTML中加载静态文件

时间:2017-09-21 04:56:25

标签: python html django

我正在尝试加载我的Django项目中注入的html内部的静态文件:

<div class="bottom-box" id="left">
        <span id="title">Banks and cards</span>
        {{ card_info |safe}}
</div>

以下是通过card_info变量注入的代码:

"""
<p id="pay-card">
    <img id="pay-box-img" src="{%% static 'img/payment-card.png' %%}" height="14">
    <span id="card-number">%s x-%i %s</span>
</p>
"""

问题在于:src="{%% static 'img/payment-card.png' %%}"

当我检查HTML页面时,我看到这一行:

src="{% static 'img/payment-card.png' %}"

这是我想要获取的行(取自工作静态文件):

src="/static/img/payment-card.png"

似乎不是rending,我对如何在变量内部获取静态文件链接进行渲染没有丝毫的线索。

修改

我刚注意到的其他东西,我的CSS似乎在加载后似乎不适用于html代码...... 问题已经解决。

澄清上述问题;我在Safari中测试,之前的CSS被不断加载而不是我写的新CSS所以我必须先清除我的cookie然后才能使用新的CSS ......

解决

{% load staticfiles %}
{% for i in payment_info %}
<form class="card_display" method="post" action="/summary/default_swap/">
{% csrf_token %}
    <p>
        <img id="pay-box-img" src="/static/img/payment-card.png" height="14">
        <input type="hidden" name="card-number" value="{{ i.last_4 }}"/>
        <input type="submit"/>
        <span id="card-number">{{ i.card_type }} x-{{ i.last_4 }} {{i.get_default_display }}</span>
    </p>
</form>
{% endfor %}

上面的代码让我成为了我需要的正义。我接受的答案让我得到了这个启示。正如@Kyle所说,上面是通过传递查询集并在HTML中直接迭代它来完成的,以便获得我需要的所需结果...

2 个答案:

答案 0 :(得分:1)

我不确定您是否有特定原因通过上下文变量传递模板化的card_info,但您应该使用Django提供的include tag。关于include标记的一个很酷的部分是,所有包含的模板将获得渲染模板时使用的相同上下文。

<强> my_template.html

<div class="bottom-box" id="left">
    <span id="title">Banks and cards</span>
    {% include "card_info.html" %}
</div>

<强> card_info.html

{% load staticfiles %}
<p id="pay-card">
    <img id="pay-box-img" src="{% static 'img/payment-card.png' %}" height="14">
    <span id="card-number">%s x-%i %s</span>
</p>

答案 1 :(得分:0)

我们假设您从名为&#34;付款&#34;的Django模型中获取您的卡号。卡号存储在模型的card_number字段中。在您看来:

from django.views import generic
from myapp.models import Payment
import re

class PaymentView(generic.DetailView):
    model = Payment
    template_name = 'payments/detail.html'

    def get_context_data(self, **kwargs):
        context = super(PaymentView, self).get_context_data(**kwargs)
        card_number = self.object.card_number
        # leave only last digits after final dash
        context['card_number'] = re.sub(r'^.*-(\d+)$', r'xxxx-\1', card_number)
        return context

在您的模板payments/detail.html中,您现在只需显示卡号:

{% load static %}
<div class="bottom-box" id="left">
    <span id="title">Banks and cards</span>
    <p id="pay-card">
        <img id="pay-box-img" src="{% static 'img/payment-card.png' %}" height="14">
        <span id="card-number">{{ card_number }}</span>
    </p>        
</div>

将视图连接到网址:

# app/urls.py
from .views import PaymentView
urlpatterns = [
    url('^payments/(?<pk>[0-9]+)/$', PaymentView.as_view(), name='payment_view'),
]