我有一个模板页面,当用户访问网址(http://mysite/new_device
)
config.add_route('new_device', '/new_device')
views.py方法:
@view_config(route_name="new_device", renderer='templates/main.html')
def new_device(request):
do stuff......
return dict(title=title, partial=partial, deviceTypes=deviceTypes, sections=sections)
当我转到该链接时,页面显示正确,jinja2打印了我的python方法的return语句中传递的所有数组和字典。
在我的页面上,我有一个select
标签,其中包含一组用户可以选择的选项(变压器,交换机等),它将根据所选选项加载字段(ajax调用以获取数据) )。我想要做的是使用jquery和ajax加载相应的字段,方法是检查我所拥有的select
的变化,获取id,然后对python方法new_device
进行ajax调用。
$("#deviceTypes").change(function () {
var deviceTypeID = $(this).val();
var data = {
"deviceTypeID": deviceTypeID
}
$.ajax({
url: "http://127.0.0.1:6543/new_device",
type: "POST",
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
success: function (response, textStatus, jqXHR) {
},
error: function (jqXHR, textStatus, errorThrown) {
//change this back to error throwing after wards
alert("error");
}
});
});
我遇到的问题是从方法返回数据,但客户端没有使用新信息进行更新。
这是我的html页面的片段
<select id="deviceTypes" class="inputBoxes">
{% for key, value in deviceTypes.iteritems() %}
<option value="{{key}}">{{value}}</option>
{% endfor %}
</select>
<br />
{% for sec in sections %}
<label class="inputBoxLabels">{{sec}}</label><br />
{% endfor %}
换句话说,jinja2在这里不打印新返回的信息。它只能在初始加载时访问一次数据或者它是如何工作的?
答案 0 :(得分:1)
我不是python或jinja2开发人员,但从您的解释看起来您希望使用来自AJAX调用的数据填充deviceTypes下拉列表。为此,您需要在Success处理程序中为DOM操作添加逻辑。
$.ajax({
url: "http://127.0.0.1:6543/new_device",
type: "POST",
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
success: function (data) {
var options = $("#deviceTypes");
$.each(data, function() {
options.append(new Option(this.key, this.value));
});
},
您可以参考以下链接在python中创建JSON数据。
答案 1 :(得分:0)
经过一段时间的考虑后,我想出了一个解决方案。
在我的网址中,我只添加了deviceTypeID
参数
config.add_route('new_device', '/new_device/{deviceTypeID}')
然后,只要用户从列表中选择一个选项,我只需将页面重定向到该id,然后从我的python方法加载新返回的数据
$("#deviceTypes").change(function () {
var deviceTypeID = $(this).val();
var data = {
"deviceTypeID": deviceTypeID
}
window.location = "http://127.0.0.1:6543/new_device/" + deviceTypeID + "/0"
});