【问题标题】:Django how to get request.get_host?Django如何获取request.get_host?
【发布时间】:2018-09-24 12:30:34
【问题描述】:

感谢您阅读我的问题。我没有收到获取主机的请求。我正在向在我的应用程序中注册的司机发送一封电子邮件。我正在发送一个预订链接,其中包含他们在 URL 中的 ID。问题是我没有得到主机。 例如 点击链接后,我希望他重定向到他可以看到汽车的页面。

在邮件中输出 发送邮件后:

请点击链接预订汽车/drivers/2/

但我想要一个正确的链接以通过邮件发送给他

例如

http://127.0.0.1:8000/drivers/1/

Views.Py

from django.template import Context, Template as mailt

@csrf_exempt
def rentacar_carapp_approve(request):
    if request.POST:
        try:
            args['driver'] = driver = Driver.objects.get(id=request.POST.get('driver_id'))
            subject = "Please Register Your Car"
            from_email = settings.EMAIL_HOST_USER
            to_email = 'bakrshk@gmail.com'
            if to_email is not None:
                template = mailt("""Please hit the link and book a car {{ request.get_host }}{% url 'detail' driver_id=driver_id %}""")
                ctx = Context({'driver_id': driver.id})
                join_message = template.render(ctx)
                send_mail(subject=subject, from_email=from_email, recipient_list=[to_email], message=join_message,
                          fail_silently=False)
                print("email sent")
                print(request.get_host)
        except Driver.DoesNotExist:
            print("Driver doesn't exists")

Url.py

url(r'^drivers/(?P<driver_id>\d+)/$', rent_views.detail, name='detail'),

【问题讨论】:

  • ctx = Context({'driver_id': driver.id, request: request })
  • 或者直接在视图中执行request.get_host() 并将其传递到上下文中。
  • @BearBrown 我在上下文中通过它但仍然相同请点击链接并预订汽车/drivers/2/
  • @DanielRoseman request.get_host() 我需要在其中添加一些库吗?
  • 我不明白你的问题。

标签: python django django-views django-urls django-email


【解决方案1】:

最好的方法是使用HttpRequestbuild_absolute_uri 方法在您的视图中构建 URL,因为这也会添加当前协议(https 或 http):

url = request.build_absolute_uri(reverse('detail', kwargs={'driver_id': driver.id}))
ctx = Context({'url': url})
template = mailt("""Please hit the link and book a car {{ url }}""")
join_message = template.render(ctx)

这应该会导致 http://localhost:8000/drivers/2 显示在您的电子邮件中。

【讨论】:

  • 非常感谢。它解决了。我可以问一个问题吗?
【解决方案2】:

像这样简单地构建 url 并尝试。

request.get_host +'/driver/'+driver_id

【讨论】:

  • 没有得到这个我会建立一个这样的 url 但我必须通过 driver_id 所有这些
  • 这不是一个好的答案。问题是 request.get_host 没有被渲染。在模板中硬编码路径是一个坏习惯,使用{% url %} 模板标签始终是首选方法。
猜你喜欢
  • 1970-01-01
  • 2018-10-16
  • 2019-07-23
  • 2020-07-15
  • 2018-11-08
  • 2012-03-23
  • 2020-06-12
  • 2018-05-29
  • 2011-12-23
相关资源
最近更新 更多