我目前正在使用django制作网站。现在我想通过网站上的按钮从我的模板/视图中执行python脚本。它应该是可能的,但说实话我不知道如何。
一个例子是最好的。
感谢您提供任何帮助。
答案 0 :(得分:4)
如果您正在使用Django - 最好的方法,恕我直言,只是创建将处理您的python代码的视图,然后通过ajax请求在onclick事件中访问它。
<强> yourapp / views.py 强>
def your_python_script(request):
if request.is_ajax:
# do your stuff here
...
else:
return HttpRequest(status=400)
如果您正在使用django,您应该使用jQuery,并在您的模板中添加javascript代码,如下所示:
$("#<your_button_id>").click( function() {
$.post("your_python_script_url", {<dict with any args you need>}, function () {
// What to do when request successfully completed
});
});
如果您正在使用它,请不要忘记CRSF令牌。如何处理它,你可以在官方django文档中找到。
<强>更新强>
您可以将csrf令牌添加到页面模板中,如:
<script>
var csrf_token = '{% csrf_token %}';
...
</script>
接下来,您需要绑定到全局jquery ajaxSend 事件,并将令牌添加到任何POST请求。
$("body").bind("ajaxSend", function(elm, xhr, s) {
if (s.type == "POST") {
xhr.setRequestHeader('X-CSRF-Token', csrf_token);
}
});
这样的事情应该有效。
答案 1 :(得分:3)
现在好了,我想我会写下答案:
<强> view.py:强>
import script as gh
def get_hostname(request):
gh.main()
return HttpResponseRedirect('/')
urls.py:
...
url(r'^get_hostname/$', 'thinco.views.get_hostname'),
...
模板中的某个地方:
...
<form action="/get_hostname/" method="GET">
<input type="submit" value="Liste der Thin Clients laden">
</form>
...
答案 2 :(得分:1)
创建一个视图函数并为其执行@dajaxice_register装饰器:
一个愚蠢的例子如下:
models.py:
class Funkyness(models.Model):
funktasm = models.CharField(max_length=128)
funfasticness = models.TextField()
urls.py:
url(r'^funk$', 'views.myFunkyView'),
views.py:
def myFunkyView(request)
render_to_request('index.htm', {'where': 'home'}, context_instance=RequestContext(request))
的index.htm:
{% if where %}
You are {{ where }}
{% endif %}
当你转到http://yoursite.com/funk时,你会得到index.htm,你会看到一个页面上写着“你在家。”
现在,动态部分...... 写一个视图方法:
from django.utils import simplejson
def getHowFunky(request, v):
html = """
<div class="my_message">
This is really funky, almost stinky...
<br />
""" + str(v) + """
</div>
"""
return simplejson.dumps({'message': html})
回到index.htm:
<script type="text/javascript>
/* first argument is return JS function, the second is the dictionary of data to sent to the python method. */
function init(){
Dajaxice.package.getHowFunky(showFunky, {'v': "Your's Truly... Fubar"});
}
function showFunky(data){
/* This is the data returned back from the AJAX (Dajaxice) call. */
document.write(data.message)
}
</script>
因此,您构建了一个获取输入并返回内容的python方法。你用Dajaxice注册它,你调用它,传递一个回调方法。它运行,当它成功时,它将python返回(可能是JSON对象)作为参数发送到回调方法。然后,该方法将从Dajaxice调用中获得的内容写入屏幕。
有关Dajaxice的更多信息,请访问:http://dajaxproject.com/
支持Jorge Bastida,Dajax / Dajaxice的唯一开发人员!
答案 3 :(得分:0)
我能想到的答案是使用:
Django + Dajax
Django链接: https://docs.djangoproject.com/en/1.4/
Dajax实际上是django的ajax: 访问他们的网站并参考他们的示例以便快速入门 http://www.dajaxproject.com/
您可以在django视图中创建按钮,触发按钮后,您可以使用运行python代码段,而不是脚本。
如果要运行独立脚本,可以查看djcelery。 http://pypi.python.org/pypi/django-celery