Доступ к доменному имени внутри функции модели
У меня есть класс модели 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, вызываемому в шаблоне представления.
Какой лучший способ сделать это?
- 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
- Somehow retreive it inside model function - I've seen Site class from contrib, that contains domain as well
- Somehow wrap bodyWithLinks() model's method inside views.py and pass it to template with context
Обратите внимание, что http://my.doma.in/
не может быть жестко закодирован, так как пользователь может обращаться к нему с другими доменами, например, localhost:8000
:-)