Могу ли я поднять Http404 в теге шаблона Django?

У меня есть приложение Django, которое предоставляет тег шаблона profile, Тег принимает имя пользователя в качестве аргумента. Как мне относиться к ситуации, когда нет User экземпляр с данным именем пользователя? Имеет ли смысл поднимать HTTP 404 внутри тега шаблона? Или мне просто передать пустой словарь в шаблон?

4 ответа

Решение

Я не думаю, что можно поднять 404 из шаблона, и вы не должны делать это, если можете. Вы должны держать логику и представление отдельно.

У вас есть две возможности звука.

  • Ничего не рендеринг с вашим тегом шаблона
  • Поднимите ошибку шаблона.

Вы не говорите точно, что делает ваш шаблонный тег, поэтому я не могу рекомендовать ни один из двух, но наиболее обычная вещь, которую нужно сделать с шаблонным тегом, - это молчаливая ошибка.

Если страница ориентирована на пользователя, вы должны заставить пользователя @login_required перед рендерингом этой страницы, чтобы вы знали, что пользователь существует.

В противном случае, по соглашению, вы должны просто молча потерпеть неудачу в тегах шаблона.

Что вы должны сделать, это проверить в вашем шаблоне, если user переменная существует до отображения profile тег.

Я вижу два пути:

Используйте оператор if с кодом JavaScript для перенаправления, например

{% if profile_not_exist %}
   Javascript with redirect
{% else %}
   Generic code
{% endif %}

Или определите логику с точки зрения (лучше), как

def index(request):
   if(profile_not_exist):
      indexTemplate = loader.get_template('404.html')
   else:
      indexTemplate = loader.get_template('index.html')
Другие вопросы по тегам