Форма 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})

У вас здесь две основные проблемы:

  1. Вы отображали свой базовый шаблон как корневой каталог (base.html) и поэтому наследование шаблонов Django работало неправильно. Вам нужно отобразить дочерний шаблон (тот, который включает extends), если вы хотите, чтобы наследование шаблонов работало правильно.
  2. Вам нужно передать вашу Django форму (SearchUser) в функцию render представления
  3. .

Я рекомендую внести следующие изменения:

====================

Удалите ссылку на представление 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})
Вернуться на верх