Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-if、elif、elif、else语句未按预期工作_Python_Django_If Statement_Http Referer - Fatal编程技术网

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

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

我将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 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”