Доступ к доменному имени внутри функции модели

У меня есть класс модели ArticleWithLinks, содержащий метод bodyWithLinks().

Возвращает body(текст) статьи + строго отформатированную строку ссылок, оформленную следующим образом:

'[3]: http://my.doma.in/articles/some-slug "Good article!"', соединенных '\r\n'. Конечно, это можно было бы сделать более элегантным способом, но... все равно ;-)

Это должно быть сделано так, потому что тело+ссылки будут позже совместно обрабатываться markdown при рендеринге шаблона.

Детали ссылки, такие как [id] или some-slug или "Title" (упакованные в другой класс) я могу легко получить внутри models. py и даже динамически добавлять /articles/ с помощью метода get_absolute_url().

Однако, как вы, вероятно, знаете, этот метод возвращает URL без доменного имени. Я полностью понимаю концепцию, что модели не должны знать о контексте их использования (запроса), но я должен вводить его перед тем, как передать его процессору markdown, вызываемому в шаблоне представления.

Какой лучший способ сделать это?

  1. Pass request (or even better - domain only) to model's bodyWithLinks() as a parameter and join it inside. I've googled it and found something like simple template tag
  2. Somehow retreive it inside model function - I've seen Site class from contrib, that contains domain as well
  3. Somehow wrap bodyWithLinks() model's method inside views.py and pass it to template with context

Обратите внимание, что http://my.doma.in/ не может быть жестко закодирован, так как пользователь может обращаться к нему с другими доменами, например, localhost:8000 :-)

Вернуться на верх