2016-05-06 38 views
0

我正在构建一个web服务,以便人们可以搜索到数据库。可以说我有用户和公司。每个用户和公司都可以被认为是他们的ID。所以,如果你搜索myurl/users/<id>,你会得到该用户的信息,另一方面,如果你搜索公司/你得到该公司的信息。 为此,我创建了两个简单的输入文本(一个用于用户,另一个用于公司),人们可以输入<id>。我的问题是,当我从输入文本中得到这个值时,我得到这个myrul/users?<id>而不是myurl/users/id。我试图硬编码的斜线,但后来我得到myrul/users/?<id>。 所以我的问题是如何获得输入文本作为一个网址,而不是一个变量。得到的输入形式不是变量,而是url

我用的烧瓶,所以我的HTML有Jinja2的这样的代码:

<!-- USER id --> 
    <form method='GET' action={{url_for('get_info_by_id', type_collection='user')}}> 
     <input type="text" name="my_id"/><input type="submit" value="Go">       
    </form> 

<!-- COMPANY id--> 
    <form method='GET' action={{url_for('get_info_by_id', type_collection='company')}}> 
     <input type="text" name="my_id"/><input type="submit" value="Go">      
    </form> 

在我的python脚本(瓶)

@app.route('myurl/<type_collection>/<my_id>') 
get_info_by_id(type_collection,my_id): 
    # search into the database and return info about that id 
+2

如果哟您希望将表单变量放在URL中而不是查询字符串或邮件正文中,您需要使用JavaScript来捕获表单提交事件并导航到新的URL。 – dirn

+0

@dirn是正确的,但看看我的答案,如果你只是想让你的表单搜索数据库并返回你的对象。 – dkhamrick

+0

我会通过JavaScript,谢谢。 – Dovi

回答

1

由于@dirn在评论中建议,我做到了通过JavaScript,这里是代码,如果别人也感兴趣:

HTML:

<!-- USER id --> 
<form method='GET' class="search" id="user" action=""> 
    <input type="text" name="my_id"/><input type="submit" value="Go"> 
</form> 

<!-- COMPANY id--> 
<form method='GET' class="search" id="company" action=""> 
    <input type="text" name="my_id"/><input type="submit" value="Go"> 
</form> 

JS:

$(".search").submit(function(event){ 
    event.preventDefault(); 
    var my_id = $(this).find(":input").val(); 
    url = 'myurl/'+ $(this).attr("id") + '/' + my_id; 
    window.location.href = url;  
}); 

蟒蛇(烧瓶)

@app.route('myurl/<type_collection>/<my_id>') 
get_info_by_id(type_collection,my_id): 
    # search into the database and return info about that id 
0

有不能使用的变量,或者是有原因的你只是想把它放到一个URL中,以便你可以进行搜索?我出去走了一段路,并假设你只是想让表单和数据库搜索工作,所以试试以下内容。

调整你的路线,像这样:

@app.route('myurl/<type_collection>/') 
def findAllTheThings(): 
    if not request.form['my_id']: # Just check if a specific entity is chosen 
     return render_template('YourTemplateHere') # If no entity, then render form 
    entity_id = request.form['my_id'] 
    get_info_by_id(type_collection, entity_id): 
    # search into the database and return info about that id 

现在调整模板如下:

<!-- USER id --> 
<form method='GET' action={{url_for('findAllTheThings', type_collection='user')}}> 
    <input type="text" name="my_id"/><input type="submit" value="Go">       
</form> 

<!-- COMPANY id--> 
<form method='GET' action={{url_for('findAllTheThings', type_collection='company')}}> 
    <input type="text" name="my_id"/><input type="submit" value="Go">      
</form> 

现在,如果没有实体已被选中,你会只呈现形式。你可以通过闪光灯让他们知道他们需要选择一个特定的ID,或者让他们弄清楚。如果一个实体被选中,你会正确地调用这个函数。

+0

谢谢,但我确实需要将它作为一个url而不是一个变量 – Dovi

相关问题