Почему мне нужно указывать HTML-файл в render()

Почему мне нужно указывать имя html файла в render() - я уже задал url в файле проекта в urls.py в django

urls.py

url('view-books',views.viewBooks)

views.py

def viewBooks(request):
    books=models.Book.objects.all()
    res=render(request,'BRMapp/view_book.html',{'books':books})

Почему я не могу уступить в оказании помощи view-books?

думаю, у вас опечатка

def viewBooks(request):
    books=models.Book.objects.all()
    context = {"books":book}
    return render(request,'BRMapp/view_book.html',context)

Ваш вопрос, почему вам нужно имя html файла в render, потому что render - это функция, она принимает 3 аргумента первый - запрос второй - "путь html файла" третий - контекст

дальнейшее объяснение

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

К сожалению, вы ничего не вернули в своем представлении. Поэтому вам нужно добавить return в вашу функцию:

def viewBooks(request):
    books=models.Book.objects.all()
    return render(request,'BRMapp/view_book.html', {'books':books})

Вы можете взглянуть на это учебное пособие.

https://yourwebsite/view-book не то же самое, что BRMapp/view_book.html, Django должен знать, что одно соответствует другому.

Маршрутизация в Django работает следующим образом:

  1. Пользователь отправляет запрос в Django с url.
  2. Django просматривает ваши url в urls.py в поисках path, который соответствует тому, что было запрошено.
  3. Когда он находит путь, например view-books, этот путь имеет view. Представление - это просто функция (viewBooks()), и Django выполняет ее.
  4. Ожидается, что функция view вернет content, который увидит пользователь. При желании вы могли бы написать всю страницу вручную в виде строки в return строке viewBooks(), но это неудобно, поэтому вместо этого вы говорите Django сделать страницу за вас, начиная с шаблона . Для этого вы вызываете render().
  5. .
  6. Что делает render(), так это берет шаблон и заменяет все части, которые должны быть заменены для пользователя, который будет его видеть. Но чтобы узнать, как будет выглядеть исходное содержимое, ему нужно откуда-то его прочитать, и это HTML-файл BRMapp/view_book.html.
  7. .

HTML-файл не обязательно должен иметь то же имя, что и представление, вы могли бы назвать его foobar.html и все работало бы так же. Но независимо от его имени, вам нужно сказать Django, что вы хотите использовать файл (render() говорит Django об этом), и вам нужно сказать Django, где этот файл находится. У вас будет много разных файлов в разных местах с разными именами, и может случиться так, что у вас будет одинаковое имя для шаблонов в разных каталогах, поэтому Django не будет пытаться угадать, какой из них вам нужен: вам придется указать путь к нему внутри render(), чтобы Django знал, где начать создание страницы.

Если бы вы указали URL render() вместо пути к файлу, Django дошел бы до пункта 5, а затем вернулся бы к пункту 1, чтобы понять, что означает этот URL, и так до бесконечности

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