Как перенаправить на вторую страницу, если я захожу в приложение второй раз - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь создать веб-приложение flask, где, если пользователь впервые посещает мое приложение, он будет перенаправлен на страницу index.html, где ему будет предложено ввести имя и отправить его. Затем я сохраняю имя в локальном хранилище и перенаправляю пользователя на вторую html страницу channels.html. Теперь, если пользователь закрывает вкладку и посещает приложение во второй раз, он должен быть перенаправлен на вторую страницу channels.html, то есть маршрут "/chanels" автоматически вместо первой страницы.

Вот файл app.py python, который я написал до сих пор:

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/channels", methods=['GET', 'POST'])
def channels():
    if request.method == "POST":
        name = request.form.get("display_name")
        return render_template("channels.html", name=name)
    render_template("channels.html")

Вот мой индекс. html:

<script src="{{url_for('static', filename='index.js')}}"></script>
<h2>Enter your name!</h2>
<form action="/channels" method='Post'>
            <input id="displayname" name="display_name" placeholder="Name" autocomplete="off" autofocus required type="text"/>
            <input type="submit" id="submitbutton" onclick="store()"/>
</form>

И index. js:

function store(){
    var name= document.getElementById("displayname");
    localStorage.setItem("displayname", name.value);
}

Я пробовал поискать в Google, как это сделать, но не нашел решения.
Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ : по предложениям @AkibRhast я попытался проверить, есть ли localStorage или нет, и если да, перенаправить на channels.html, поэтому я добавил следующий код в свой файл index.js:

if(localStorage.getItem("displayname")){
    window.location.replace("/channels");
}

Но теперь всякий раз, когда я посещаю страницу индекса, я получаю ошибку 404 Not Found, хотя URL-адрес в строке URL-адресов имеет ссылку на каналы, то есть http://127.0.0.1:5000/channels.html.

1 Ответ

1 голос
/ 26 мая 2020

Так что, похоже, вы движетесь в правильном направлении.

Попробуйте следующее:

  1. В своем индексе. html добавьте сценарий в заголовок страницы / вверху страницы. Вы хотите, чтобы сценарий был загружен 1-м.
  2. Итак, когда пользователь переходит к index. html, сценарий проверяет, существует ли локальное хранилище.getItem ("displayName").
  3. Если это так, перенаправить на каналы. html

После того, как вы попробовали это и внесли соответствующие изменения в свой код, и если это не сработало, отредактируйте исходное сообщение, используя то, что вы сейчас пробовали, а также трассировку стека любых ошибок. Я более чем счастлив взглянуть на него еще раз и переработать свой ответ.

Обновления

Итак, я считаю, что причина, по которой он не работает на вашей стороне в настоящее время, связана с тем, что в вашей функции каналов вам необходимо иметь возвращаемое значение для вашего второго шаблона рендеринга, например:

@app.route("/channels", methods=['GET', 'POST'])
def channels():
    if request.method == "POST":
        name = request.form.get("display_name")
        return render_template("channels.html", name=name)
    return render_template("channels.html") # This line has been modified

Еще одно изменение, которое вам нужно внести в свой код, чтобы изменения вступили в силу, - это ваш index. js файл. Просто добавьте эту функцию.

//This function needs to be added to index.js
window.onload = function(){
if(localStorage.getItem("displayname")){

    window.location.replace("/channels");


}

Я реализовал вышеупомянутые изменения со своей стороны, и, похоже, все работает, как ожидалось, пожалуйста, позвольте мне, если это сработает для вас. Кроме того, с другой стороны, лучший способ проверить это, работает ли он, - использовать режим инкогнито.

...