Форма Django не отображается? (Нет модели)
Моя форма Django не отображается в html.
все, что я могу видеть, это текст Get Rank. Я не уверен, что это потому, что у меня нет модели, или, может быть, что-то не так с моим html?
Если вам нужно увидеть что-то еще, дайте мне знать, я не уверен, что не так, я также пытался просто сделать все это внутри функции home, но тогда она не отображает html вообще.
Побочный вопрос - Также я планирую получать только имя пользователя и тег вне его имени ("JohnDoeNA#1"), поэтому я, вероятно, использую метод get, правильно?
views.py:
from urllib import response
from django.shortcuts import render
from django.http import HttpResponse
import requests
from .forms import SearchUser
import json
# Create your views here.
def index(response):
return render(response, "main/base.html", {})
def home(response):
form = SearchUser()
data = requests.get(
'https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/ReallyBlue/NA1?api_key=RGAPI-APIKEY')
userid = data.json()['puuid']
return render(response, "main/home.html", {
'userid': userid,
# 'mmr': apidata['rank']
})
def search(response):
form = SearchUser()
return render(response, "main/home.html", {"form": form},)
forms.py:
from django import forms
class SearchUser(forms.Form):
name = forms.CharField(label="Name", max_length=200)
home.html:
{% extends 'main/base.html'%}
{% block content %}
<h2>Valorant Ranked Checker</h2>
<form method="post" action="/home/">
{{form}}
<buttom type="submit", name="search">
Get rank
</buttom>
</form>
<p><strong>{{userid}} - {{mmr}}</strong></p>
{% endblock %}
base.html:
<!DOCTYPE html>
<head>
<title>Blue's Valorant Ranked Checker</title>
</head>
<body>
<div id="content", name="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
Ваша функция представления, которая отображает форму, и шаблон формы должны совпадать. form
также должна быть в вашем контексте.
Поместите форму в home.html
и измените домашний вид следующим образом:
def home(response):
form = SearchUser()
return render(response, "main/home.html", {'form': form})
У вас здесь две основные проблемы:
- Вы отображали свой базовый шаблон как корневой каталог (
base.html
) и поэтому наследование шаблонов Django работало неправильно. Вам нужно отобразить дочерний шаблон (тот, который включаетextends
), если вы хотите, чтобы наследование шаблонов работало правильно. - Вам нужно передать вашу Django форму (
SearchUser
) в функциюrender
представления .
Я рекомендую внести следующие изменения:
====================
Удалите ссылку на представление index
в вашем urls.py
, поскольку оно нам не нужно. Вместо этого используйте ваш дочерний шаблон home
в качестве корневого представления:
urls.py:
from django.urls import path
from . import views
urlpatterns = [
path("", views.home, name="home")
]
====================
Удалите больше не нужную функцию index
из views.py
. Вы также захотите передать ссылку на вашу форму (SearchForm
) внутри функции сокращения Django render
.
views.py:
from urllib import response
from django.shortcuts import render
from django.http import HttpResponse
import requests
from .forms import SearchUser
import json
# Create your views here.
def home(response):
data = requests.get(
'https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/ReallyBlue/NA1?api_key=RGAPI-APIKEY')
userid = data.json()['puuid']
return render(response, "main/home.html", {
'form': SearchUser(), # include reference to your form
'userid': userid,
# 'mmr': apidata['rank']
})
def search(response):
form = SearchUser()
return render(response, "main/home.html", {"form": form})