我将Django
项目设为在线后,我的部分HTML
代码无法正常运行。相反,它们会在页面上显示为原始HTML
代码。但是,当我在localhost(而不是Heroku)上运行网站时,这个问题就不会发生了。链接将按原样显示。
我将Python 3.4
与Django 1.9
一起使用,托管网站是Heroku。这是问题的图像:
我使用'检查'检查了原始HTML
代码的来源。 Chrome中的工具,发现了这个:
我遇到问题的应用是llazzaro的调度程序(在GitHub上),所有模板都可以在那里找到。第一张图片中指示的模板具有以下代码:
{% extends "base.html" %}
{% load scheduletags i18n %}
{% block body %}
<div class="tablewrapper">
<div class="calendarname">{{ calendar.name }}</div>
{% prevnext "tri_month_calendar" calendar periods.month "F Y"%}
<div class="now">
<a href="{% url "tri_month_calendar" calendar.slug %}">
{% trans "This month" %}
</a>
</div>
<table align="center">
<tr>
<td valign="top">{% month_table calendar periods.month "small" -1 %}</td>
<td width="12"> </td>
<td valign="top">{% month_table calendar periods.month "small" %}</td>
<td width="12"> </td>
<td valign="top">{% month_table calendar periods.month "small" +1 %}</td>
</tr>
</table>
</div>
<div class="navigation">
<a href="{% url "month_calendar" calendar.slug %}{% querystring_for_date periods.month.start 2 True %}">
{% trans "Monthly Calendar" %}
</a>
<a href="{% url "year_calendar" calendar.slug %}{% querystring_for_date periods.month.start 1 True %}">
{% trans "Full Year Calendar" %}
</a>
</div>
{% endblock %}
有人可以提供一些帮助或建议吗?感谢。
编辑#1 :我做了一些调查,并认为在上面的代码中,这两行是导致问题的最可能原因:
<div class="calendarname">{{ calendar.name }}</div>
{% prevnext "tri_month_calendar" calendar periods.month "F Y"%}
对于第二行代码,我找到了&#39; prevnext&#39;作为模板标记,代码为:
@register.inclusion_tag("schedule/_prevnext.html")
def prevnext(target, calendar, period, fmt=None):
if fmt is None:
fmt = settings.DATE_FORMAT
context = {
'calendar': calendar,
'period': period,
'period_name': format(period.start, fmt),
'target': target,
}
return context
然后我找到了&#39; _prevnext.html&#39;,以下是其内容:
{% load scheduletags staticfiles %}
<div class="row row-centered">
{% prev_url target calendar period %}
<b>{{period_name}}</b>
{% next_url target calendar period %}
</div>
&#39; prev_url&#39;和&#39; next_url&#39;如下:
@register.simple_tag
def prev_url(target, calendar, period):
now = timezone.now()
delta = now - period.prev().start
slug = calendar.slug
if delta.total_seconds() > SCHEDULER_PREVNEXT_LIMIT_SECONDS:
return ''
return '<a href="%s%s"><span class="glyphicon glyphicon-circle-arrow-left"></span></a>' % (
reverse(target, kwargs=dict(calendar_slug=slug)),
querystring_for_date(period.prev().start, autoescape=True))
@register.simple_tag
def next_url(target, calendar, period):
now = timezone.now()
slug = calendar.slug
delta = period.next().start - now
if delta.total_seconds() > SCHEDULER_PREVNEXT_LIMIT_SECONDS:
return ''
return '<a href="%s%s"><span class="glyphicon glyphicon-circle-arrow-right"></span></a>' % (
reverse(target, kwargs=dict(calendar_slug=slug)),
querystring_for_date(period.next().start, autoescape=True))
我希望这些新信息有所帮助。再次感谢大家。
编辑#2 :我再次查看了有问题的页面的源代码,发现HTML标签&#39;括号被视为转义字符(&lt;):
<div class="row row-centered">
<a href="/main/calendar/tri_month/dd/?year=2016&amp;month=2&amp;day=1&amp;hour=0&amp;minute=0&amp;second=0"><span class="glyphicon glyphicon-circle-arrow-left"></span></a>
<b>March 2016</b>
<a href="/main/calendar/tri_month/dd/?year=2016&amp;month=4&amp;day=1&amp;hour=0&amp;minute=0&amp;second=0"><span class="glyphicon glyphicon-circle-arrow-right"></span></a>
</div>
不知何故,通过Python函数返回的HTML代码实际上并未实现。有什么建议吗?
答案 0 :(得分:0)
经过一些研究后,我发现another StackOverflow post关于通过模板标签返回HTML。我将模板代码更改为
{% autoescape off %}{% prevnext "tri_month_calendar" calendar periods.month "F Y"%}{% endautoescape %}
并且有效。
事实证明我错了,并不是Python代码的错。相反,模板获取了prevnext
输出的内容并转义了所有特殊字符。
但是,当我在本地运行项目时,我仍然不明白为什么模板标签没有问题;标签没有被转义。至少问题已经解决了。