Передача параметров с помощью тега действия в HTML - PullRequest
0 голосов
/ 05 апреля 2020

Я работаю с Tornado (python), и мои обработчики имеют этот формат.

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            url(r'/', MainHandler, name="main_handler"),
            url(r'/user', UserHandler, name="user_handler"),
            url(r'/users', UserListHandler, name="user_list_handler"),
            url(r'/profile/(?P<username>\w+)', UserProfileHandler, name="user_profile_handler"),    
        ]
        settings = dict(
            template_path = os.path.join(os.path.dirname(__file__), "templates"),
            static_path = os.path.join(os.path.dirname(__file__),"static"),
            debug = True)
        self.db = client['user_db']
        super().__init__(handlers, **settings)

Мой HTML код на целевой странице:

<h1>INFO DB</h1>
    <p>Search via username...</p>
    <form method="get" action="{% url 'user_profile_handler' find_username %}">
        <p>Enter Username<br>
        <input rows=1 cols=20 name="find_username"></p>
        <input type="submit">
    </form>
    <br>

Теперь моя цель - когда я нажимаю кнопку «Отправить», меня перенаправляют на страницу «/ profile / {username}». Например: если имя пользователя в строке поиска - «abcd», я должен быть перенаправлен на / profile / abcd. при нажатии отправить. Что добавить в атрибут действия тега формы в HTML?

1 Ответ

0 голосов
/ 05 апреля 2020

Ну, django теги Jinja, такие как {% url%}, оцениваются при получении, поэтому вам придется фактически передать find_username в контекст, который вы не можете использовать в этой схеме, потому что вы получаете его после того, как страница загружен. Чтобы добиться того, что вы пытаетесь сделать, нужно создать представление, которое справится с такой ситуацией. В псевдокоде это будет выглядеть так:

def view(request):

    form = username_form()

    if request.method == "POST":
        form = username_form(request.POST)
        if form.is_valid():
            user = get_object_or_404(User, username=form.cleaned_data['username'])
            return redirect('profile', user.id)

    return render(request, ...., {'form': form})

...