在django模板中,如果{{ var }}
未定义,则对var
的调用将无声地失败。这使模板难以调试。有没有我可以切换的设置,所以django会在这种情况下抛出异常?
我在网上找到的解决方案的唯一提示是http://groups.google.com/group/google-appengine/browse_thread/thread/86a5b12ff868038d,这听起来非常糟糕。
答案 0 :(得分:6)
<强>的Django&LT = 1.9 强>
在TEMPLATE_STRING_IF_INVALID = 'DEBUG WARNING: undefined template variable [%s] not found'
。
settings.py
见文档:
https://docs.djangoproject.com/en/1.9/ref/settings/#template-string-if-invalid
<强>的Django&GT = 1.10 强>
在string_if_invalid = 'DEBUG WARNING: undefined template variable [%s] not found'
。
settings.py
模板选项
请参阅文档:https://docs.djangoproject.com/en/2.0/topics/templates/#module-django.template.backends.django
同时阅读: http://docs.djangoproject.com/en/dev/ref/templates/api/#invalid-template-variables
答案 1 :(得分:3)
来自djangosnippets的hack会在模板中遇到未定义的变量时引发异常。
# settings.py
class InvalidVarException(object):
def __mod__(self, missing):
try:
missing_str = unicode(missing)
except:
missing_str = 'Failed to create string representation'
raise Exception('Unknown template variable %r %s' % (missing, missing_str))
def __contains__(self, search):
if search == '%s':
return True
return False
TEMPLATE_DEBUG = True
TEMPLATE_STRING_IF_INVALID = InvalidVarException()
答案 2 :(得分:1)
考虑使用django-shouty-templates应用程序:https://pypi.org/project/django-shouty-templates/
此应用程序应用了一个猴子补丁,该补丁迫使Django的模板语言对无效假设的错误提示更大。具体来说:
如果变量名为
chef
,- 如果
sous_chef
会引发异常。chef.can_add_cakes
不是厨师的有效属性/属性/方法,can_add_cakes
将引发异常这不是编译时间安全的方法,但是它比静默地吞下错误要好,因为您忘记了一些东西!
答案 3 :(得分:0)
答案 4 :(得分:-2)
这是设计的一部分。它允许您根据上下文中是否存在变量来提供默认值和切换。它还允许模板非常灵活,并促进模板的可重用性,而不是严格的“每个视图必须拥有自己的模板”方法。
更重要的是,模板实际上不应该被“调试”。我们的想法是在视图或模型中尽可能多地将放在 模板之外。如果你想弄清楚为什么不应该传递给上下文的变量,那么你的视图中的调试位置。只需在视图返回之前将import pdb;pdb.set_trace()
放到某处,然后四处寻找。