2015-02-04 1 views
0

Это мой кодОбратный URL не показывает полный URL в Джанго

#Send mail to admin 
admin_subject = "New question added" 
admin_message = "A new question has been successfully added. Please review and approve it." 
url = reverse("admin:appname_question_change", args=(new_question.pk,)) 
admin_html_message = "<h3>%s</h3>\ 
           <p>%s</p>\ 
           <a href='%s'>%s</a>" % (admin_subject, admin_message, url, url) 

Я использовал это, чтобы отправить в почте. До того, как я получил полный URL-адрес в своей почте. Как http://192.168.1.0:8000/admin/appname/answer/12

Но теперь она только дает путь, как /admin/appname/answer/12

Я не измененном ничего просто добавил тот же код для других представлений.

Мой новый код:

from django.http import HttpRequest 
admin_subject = "New question added" 
admin_message = "A new question has been successfully added. Please review and approve it." 
location = reverse("admin:appname_question_change", args=(new_question.pk,)) 
url = HttpRequest.build_absolute_uri(location) 
admin_html_message = "<h3>%s</h3>\ 
         <p>%s</p>\ 
         <a href='%s'>%s</a>" % (admin_subject, admin_message, url, url) 
mail_admins(admin_subject, admin_message, fail_silently=False, connection=None, html_message=admin_html_message) 

Все еще получаю эту ошибку:

unbound method build_absolute_uri() must be called with HttpRequest instance as first argument (got str instance instead) 
+1

'reverse' не будет создавать абсолютные URL-адреса. Используете ли вы другой шаблон электронной почты или функцию «обратного» для создания URL-адресов раньше? –

+0

Да, я использовал функцию «reverse». –

ответ

4

Джанго Request has a method for that:

HttpRequest.build_absolute_uri(location) Returns the absolute URI form of location. If no location is provided, the location will be set to request.get_full_path().

If the location is already an absolute URI, it will not be altered. Otherwise the absolute URI is built using the server variables available in this request.

Example: " http://example.com/music/bands/the_beatles/?print=true "

Pass в url вы получите от reverse

Обновление: среди прочих, Django Rest Framework предоставляет версию обратного, которая может создавать абсолютный URL-адрес - если вы ранее использовали это, это объясняло бы изменение. (Что вы изменили?)

Смежные вопросы