Почему мне нужно указывать 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 работает следующим образом:
- Пользователь отправляет запрос в Django с url.
- Django просматривает ваши url в
urls.py
в поисках path, который соответствует тому, что было запрошено. - Когда он находит путь, например
view-books
, этот путь имеет view. Представление - это просто функция (viewBooks()
), и Django выполняет ее. - Ожидается, что функция view вернет content, который увидит пользователь. При желании вы могли бы написать всю страницу вручную в виде строки в
return
строкеviewBooks()
, но это неудобно, поэтому вместо этого вы говорите Django сделать страницу за вас, начиная с шаблона . Для этого вы вызываетеrender()
. .
- Что делает
render()
, так это берет шаблон и заменяет все части, которые должны быть заменены для пользователя, который будет его видеть. Но чтобы узнать, как будет выглядеть исходное содержимое, ему нужно откуда-то его прочитать, и это HTML-файлBRMapp/view_book.html
. .
HTML-файл не обязательно должен иметь то же имя, что и представление, вы могли бы назвать его foobar.html
и все работало бы так же. Но независимо от его имени, вам нужно сказать Django, что вы хотите использовать файл (render()
говорит Django об этом), и вам нужно сказать Django, где этот файл находится. У вас будет много разных файлов в разных местах с разными именами, и может случиться так, что у вас будет одинаковое имя для шаблонов в разных каталогах, поэтому Django не будет пытаться угадать, какой из них вам нужен: вам придется указать путь к нему внутри render()
, чтобы Django знал, где начать создание страницы.
Если бы вы указали URL render()
вместо пути к файлу, Django дошел бы до пункта 5, а затем вернулся бы к пункту 1, чтобы понять, что означает этот URL, и так до бесконечности