Django阻止页面刷新

2024-09-29 23:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

伙计们,我有两个问题。 我对Django和Python很陌生。我用一个表单构建一个页面,我可以在这些字段中输入数据,我接收数据并用它做一些操作,并在单击按钮后将其他变量传回表单字段下的div中。它实际上是工作的,但页面刷新,所以我只能看到一秒钟的结果。第二个问题是,我必须点击两次按钮,这样它才能显示正确的结果。示例:第一个按钮单击结果显示x,然后我使用其他输入并单击按钮,结果再次显示x。在我再次单击按钮后,它会显示正确的结果,我如何解决这个问题。在

你有什么建议可以改进这个系统吗?在

我已经非常感谢你的帮助了。在

我的视图文件:

from django.shortcuts import render,redirect
from django.http import HttpResponse
from pages.forms import NameForm

import requests

# Create your views here.

def home_view(request,*args,**kwargs):
    api_key = "RGAPI-9b573263-7b5a-433e-9e82-a973f5db4749"
    name = ""
    tier = ""
    rank = ""
    lp = 0
    if request.method == 'POST':
        form = NameForm(request.POST)

        if form.is_valid():
            summoner = form.cleaned_data["summoner"]
            region = form.cleaned_data["region"]
            url = "https://" + region + ".api.riotgames.com/lol/summoner/v4/summoners/" \
                                 "by-name/" + summoner + "?api_key=" + api_key
            response = requests.get(url).json()
            id = response["id"]
            name,tier,rank,lp = ranklookup(id,region,api_key)
    return render(request,"home.html",{'form' : form,'rank':rank, 'tier' : tier, 'lp' : lp, 'name' : name})





def ranklookup(id,region,api_key):
    rankurl =  "https://" + region + ".api.riotgames.com/lol/league/v4/entries/by-summoner/" + id + "" \
            "?api_key=" + api_key
    rankResponse = requests.get(rankurl).json()
    if rankResponse[0]["queueType"] == "RANKED_SOLO_5x5":
        name = rankResponse[0]["summonerName"]
        tier = rankResponse[0]["tier"]
        rank = rankResponse[0]["rank"]
        lp = str(rankResponse[0]["leaguePoints"])

    else:
        name = rankResponse[0]["summonerName"]
        tier = rankResponse[1]["tier"]
        rank = rankResponse[1]["rank"]
        lp = str(rankResponse[1]["leaguePoints"])
    return name,tier,rank,lp

以及我的HTML文件:

^{pr2}$

Tags: keynamefromimportformapiidrequest
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:33

如果您不打算完全重新加载页面,那么您应该研究如何在django(即在this previous answer)中处理AJAX表单。 否则,您可以按如下方式更改views.py代码:

def home_view(request,*args,**kwargs):
    api_key = "RGAPI-9b573263-7b5a-433e-9e82-a973f5db4749"
    name = ""
    tier = ""
    rank = ""
    lp = 0

    if request.method == 'GET':
        form = NameForm(auto_id='myform')
        return render(request,"home.html",{'form' : form, 'showdiv': False})

    if request.method == 'POST':
        form = NameForm(request.POST)

        if form.is_valid():
            summoner = form.cleaned_data["summoner"]
            region = form.cleaned_data["region"]
            url = "https://{}.api.riotgames.com/lol/summoner/v4/summoners/by-name/{}?api_key={}".format(region, summoner, api_key)

            response = requests.get(url).json()
            id = response["id"]
            name, tier, rank, lp = ranklookup(id, region, api_key)
            return render(request, "home.html", {
                'form': form,
                'rank': rank,
                'tier': tier,
                'lp': lp,
                'name' : name,
                'showdiv': True })

以及模板(现在根本不使用javascript):

^{pr2}$

相关问题 更多 >

    热门问题