【问题标题】:AttributeError: 'WSGIRequest' object has no attribute 'site' - wagtail, wagalyticsAttributeError: 'WSGIRequest' 对象没有属性 'site' - wagtail, wagalytics
【发布时间】:2020-06-11 18:51:36
【问题描述】:

我正在尝试在我的新 wagtail 网站 (https://github.com/tomdyson/wagalytics) 中实施 wagalytics。

views.py 的第 138 行弹出我的错误

site = Site.objects.get(hostname=request.site.hostname)

AttributeError: 'WSGIRequest' object has no attribute 'site'

当我把它改成类似的东西时

try:
    site = Site.objects.get(hostname=request.site.hostname)
except:
    site = '127.0.0.1'

它有效 - 或者至少让我解决了下一个问题。

显然,我不想在生产中的代码中加入 try/except 块 - 我最好了解这里发生的事情以及如何解决它。

【问题讨论】:

  • request.site 不存在。
  • 除此之外 ^ 您还想访问什么? request.site 应该包含什么?

标签: django wagtail


【解决方案1】:

请参阅Wagtail 2.9 release notes。今后,您应该在模板中使用{% wagtail_site %}{{ page.get_site}},在python 代码中使用Site.find_for_request(request)

【讨论】:

    【解决方案2】:

    出现此错误是因为 request 对象没有 .site 属性。您需要为此启用CurrentSiteMiddleware [Django-doc]

    您可以通过将'django.contrib.sites.middleware.CurrentSiteMiddleware' 添加到MIDDLEWARE 设置的元组/列表来实现。所以settings.py 文件应该是这样的:

    # settings.py
    
    # …
    
    MIDDLEWARE = [
        # …,
        'django.contrib.sites.middleware.CurrentSiteMiddleware',
        # …
    ]
    
    # …

    【讨论】:

    • 向前迈出一步...我现在打AttributeError: 'RequestSite' object has no attribute 'hostname'
    • @BenMayo: 你能用request.get_host() 替换request.site.hostname 吗?你确定你用的是最新版本?看起来它使用的是旧版本。
    • 谢谢 Willem - 我将在 GitHub 上打开一个问题。将恢复。
    猜你喜欢
    • 2022-01-21
    • 2018-09-06
    • 1970-01-01
    • 2011-03-15
    • 2021-07-04
    • 2021-12-13
    • 1970-01-01
    • 2019-10-20
    • 2016-02-02
    相关资源
    最近更新 更多