gpt4 book ai didi

Python - if、elif、elif、else 语句未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:45 28 4
gpt4 key购买 nike

我在网站上使用 Django,需要构建一个上下文处理器来提供引荐来源网址(名为 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)));

[ . . . ]

奇怪的是,上面的打印语句产生的 host 等于 local_url(来自控制台):

current host: http://localhost:8000
current urls: http://localhost:8000 [ . . . ]

但它仍在评估 else> try 并抛出一个关键错误...重点是只有当默认主机/站点不可用时,request.META ['HTTP_REFERER'] 有效。

这里出了什么问题?我错过了什么。 Python 告诉我 host != local_url 但为什么呢?

编辑

感谢@Martijn Pieters 的重要提示。我更改了打印语句,现在看到了:

current host: <Site: http://localhost:8000>
current urls: 'http://localhost:8000'

我想我忘了使用站点框架的属性:

https://docs.djangoproject.com/en/dev/ref/contrib/sites/

最佳答案

您很可能遇到空白问题;将您的格式替换为:

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:

关于Python - if、elif、elif、else 语句未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25353614/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com