【问题标题】:'dict' object has no attribute 'HTTP_REFERER''dict' 对象没有属性 'HTTP_REFERER'
【发布时间】:2017-03-30 08:34:28
【问题描述】:

我一直试图在这个答案之后找到上一个网址:

Django request to find previous referrer

所以,在我的 .py 中我做了:

print request.META
print request.META.HTTP_REFERER
print request.META['HTTP_REFERER']

request.META 返回:

{'RUN_MAIN': 'true', 'HTTP_REFERER': 'http://127.0.0.1:8000/info/contact/', 'XDG_GREETER_DATA_DIR': '/var/lib/lightdm-data/user', 'QT4_IM_MODULE': 'xim',....

所以,我可以看到 HTTP_REFERER 在那里,但是当尝试以任何一种方式访问​​它时,我都会收到错误:

<type 'exceptions.AttributeError'>
'dict' object has no attribute 'HTTP_REFERER'

如何访问它?

【问题讨论】:

  • 你的第二行是扔这个,对吧?
  • 您的第三行是正确的。第二个不是,因此例外。由于第二个引发了异常,第三个永远不会被执行。

标签: python django dictionary


【解决方案1】:

我建议:

request.META.get('HTTP_REFERER')

【讨论】:

  • 请注意,这具有不同的行为。如果标头不在META 中,它将返回None,而不是引发KeyError 异常。根据您对值的处理方式,它是捕获异常的有用简写,否则可能会忽略错过。
【解决方案2】:

request.META 是一个字典。当你这样做时,你的代码会失败

print request.META.HTTP_REFERER

因为您尝试将 HTTP_REFERER 作为属性访问,但您应该使用

作为项目访问它
print request.META['HTTP_REFERER']

如果您不确定request.META 中是否有此项目,您可以按照其他回答者的建议使用get 方法

print request.META.get('HTTP_REFERER', '')

如果HTTP_REFERERrequest.META 中,这将输出request.META['HTTP_REFERER'],否则它将打印'' 作为get 的第二个参数。 '' 将是默认值。

【讨论】:

  • @DidinaDeen 点是你不应该这样做print request.META.HTTP_REFERER
  • 嗯,我的意思是我尝试了两种方法,我会得到相同的结果。
【解决方案3】:

试试:request.META.get("HTTP_REFERER", "")

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 2021-03-08
    • 2017-05-12
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2021-01-30
    相关资源
    最近更新 更多