[使用HTML中的操作标记传递参数

问题描述 投票:0回答:1

我正在使用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',则应在按Submit时将我重定向到/ profile / abcd。在HTML中的表单标签的action属性中应放置什么?

python html django web tornado
1个回答
0
投票

Well django的{%url%}之类的Jinja标签是在获取时估算的,因此您实际上必须将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})

© www.soinside.com 2019 - 2024. All rights reserved.