Python-if、elif、elif、else语句未按预期工作
我将Django用于一个网站,需要构建一个上下文处理器来提供referer(变量名为Python-if、elif、elif、else语句未按预期工作,python,django,if-statement,http-referer,Python,Django,If Statement,Http Referer,我将Django用于一个网站,需要构建一个上下文处理器来提供referer(变量名为referer)信息 我有一个简单的if,elif,elif,else语句: [ . . . ] host = get_current_site(request) local_url = SITE_URLS['local'] dev_url = SITE_URLS['dev'] prod_url = SITE_URLS['prod'] # print referer for debugging purpose
referer
)信息
我有一个简单的if,elif,elif,else语句:
[ . . . ]
host = get_current_site(request)
local_url = SITE_URLS['local']
dev_url = SITE_URLS['dev']
prod_url = SITE_URLS['prod']
# print referer for debugging purposes - remove when done...
print("current host: {0}".format(host))
print("current urls: {0} {1} {2}".format(local_url, dev_url, prod_url))
# determine default referer - eg, set as host/site name
if host == prod_url:
referer = prod_url
elif host == dev_url:
referer = dev_url
elif host == local_url:
referer = local_url
else:
# set referer for current request
try:
referer = request.META['HTTP_REFERER']
except KeyError as e:
print('ERROR: key error - referer doesn\'t exist: {0}'.format(str(e)));
[ . . . ]
奇怪的是,上面的print语句生成的主机
等于本地url
(从控制台):
但它仍在评估else>try并抛出一个关键错误。。。关键是,只有当默认主机/站点不可用时,request.META['HTTP\u REFERER']
才有效
这里出了什么问题?我错过了一些东西。Python告诉我,host!=本地url
但为什么
编辑
感谢@Martijn Pieters的一个很好的提示。我更改了打印语句,现在看到:
current host: <Site: http://localhost:8000>
current urls: 'http://localhost:8000'
当前主机:
当前URL:'http://localhost:8000'
我想我忘了使用站点框架的属性:
您很可能存在空白问题;将格式替换为:
print("current host: {0!r}".format(host))
print("current urls: {0!r} {1!r} {2!r}".format(local_url, dev_url, prod_url))
改为使用repr()
值;这些将包括关于值类型的更多信息,任何尾随空格都将立即显示出来
如果看到django.contrib.sites.models.Site
对象,请与domain
属性进行比较:
if host.domain == prod_url:
很可能您有空白问题;将格式替换为:
print("current host: {0!r}".format(host))
print("current urls: {0!r} {1!r} {2!r}".format(local_url, dev_url, prod_url))
改为使用repr()
值;这些将包括关于值类型的更多信息,任何尾随空格都将立即显示出来
如果看到django.contrib.sites.models.Site
对象,请与domain
属性进行比较:
if host.domain == prod_url:
是的,我现在看到站点框架的价值与其他框架不同。啊!我编辑了我的问题。。。有什么建议可以帮我解决这个问题吗?
!r
您要再试一次吗?它是否保持空白不变?@doniyor在打印字符串时很容易漏掉尾随空白;repr()
(!r
)输出将字符串作为Python字符串文本提供给您,并用引号显示字符串的开始和结束位置;e、 g.foo
v.s.'foo'
。是的,我现在看到站点框架的值与其他框架不同。啊!我编辑了我的问题。。。有什么建议可以帮我解决这个问题吗?!r
您要再试一次吗?它是否保持空白不变?@doniyor在打印字符串时很容易漏掉尾随空白;repr()
(!r
)输出将字符串作为Python字符串文本提供给您,并用引号显示字符串的开始和结束位置;e、 g.foo
v.s.“foo”
。