如何在渲染前获取url

问题描述 投票:0回答:1

我想建立一个系统,需要检测用户打开了哪些url,并统计打开次数。

有几个不同的url共享同一个WaitView(TemplateView),所以我想在用户点击每个url的时候统计它的次数。

我在urls中加了一个dic,希望它能返回用户打开的正确url到Waitview的context1。

但是我找不到一个正确的方法来获取正确的url,(我尝试使用HttpRequest.get_full_path(),但是它继续错误。"TypeError: get_full_path() missing 1 required positional argument: 'self'")

另外,我希望WaitView能接收到正确的url和次数,然后在打开的页面上显示出来,(需要正确的url才能渲染)

所以我想知道你是否有一些建议。

真的很感谢您的帮助。

# urls.py
'''
urlpatterns = [
    re_path('get_times/.+', WaitView.as_view(), {"url": ***CORRECT_URL***})
]

'''



# views.py
'''
class WaitView(TemplateView):
    template_name = 'wait.html'

    def get_context_data(self, **kwargs):
        context1 = kwargs.items()
        print(context1)
'''
python html django url view
1个回答
1
投票

请求对象存储在 .request 的属性 View. 因此,您可以通过以下方式访问它 self.request 的方法中,因此你可以用。

class WaitView(TemplateView):
    template_name = 'wait.html'

    def get_context_data(self, **kwargs):
        print(self.request.get_full_path())
        return super().get_context_data(**kwargs)

你可以使用 .build_absolute_uri() 方法[Django-doc] 来生成绝对的URI(所以包括协议、主机名等)。

所以不需要在上下文中添加参数。

© www.soinside.com 2019 - 2024. All rights reserved.