django的views直接传一段html代码调用模板中的js函数。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django的views直接传一段html代码调用模板中的js函数。相关的知识,希望对你有一定的参考价值。
这是Java servlet中的实现方式,使用一段html代码直接调用js的import_over函数,请问在Django中要怎么实现?
表单submit取不到返回值的解决办法:
使用jquery.form.js的ajaxSubmit
1,在模版中的html文件中嵌入含有这个函数的js文件或者直接加到html里面.
2,在js中通过ajax访问打开一个链接,比如/admin/url?key=value,那么在admin.py中的url方法中这样keyvlaue = request.GET.get('key',None)来获取这个value,然后py做一番处理后,直接返回一段嵌有这个js函数的html代码到js中,然后在js中来无刷新的加入到页面中:$("#id").html(xmlhttp.responseText);
3,基本同上,应用到ajax来实现,只是在py一番处理后返回的不是一段实质的html,而是一个msg指令,js在接收到后ajax返回的指令后,运行相关的js函数.比如if (xmlhttp.responseText == 'ok') fun();
回答的希望你能理解.追问
你说的是用jQuery的ajax的post和get方法来进行向views中传数据,然后views返回数据给页面,进行处理,在这个过程中post或get方法是等着views的返回值的,一旦有返回值,页面不用刷新,就能接着执行之后的代码。
追答你写上代码运行就知道了
追问但是我的问题是:页面使用表单,传数据到views的函数,然后函数返回数据给页面,但是页面上没有函数等着接收数据啊,只能重新刷新页面了。所以我就想了,能不能在表单提交的情况下,views返回数据,不刷新页面,还能调用jquery的函数。拜托
追答已给你私信,回答的内容里有可能含有url或什么特殊字符,发不上去.
本回答被提问者采纳路由层
1.Django中路由作用
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行
from django.conf.urls import url ? urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] ? -第一个参数是正则表达式(如果要精准匹配:‘^publish/$‘) -第二个参数是视图函数(不要加括号) -url(r‘^admin/‘, admin.site.urls)
?
注意:
1.若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
2.不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
3.每个正则表达式前面的‘r‘ 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任 何 字符都不应该转义
4.urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续
3.无名分组与有名分组
无名分组
-按位置传参 -分组之后,会把分组出来的数据,当位置参数,传到视图函数,所以,视图函数需要定义形参 -url(r‘^publish/([0-9]{4})/([0-9]{2})$‘, views.publish), ? -def publish(request,*args): 视图函数接收
有名分组
-按关键字传参 -有名分组之后,会把分组出来的数据,当关键字参数,传到视图函数,所以,视图函数需要定义形参,形参名字要跟分组的名字对应,与顺序无关 -url(r‘^publish/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$‘, views.publish), ? -def publish(request, mounth,year): 试图函数接收
注意:有名分组和无名分组,不要混用
4.反向解析
-路由层: -1 无参数:url(r‘^publishadd133/$‘, views.publishadd,name=‘ddd‘), -2 无名分组:url(r‘^publishadd/([0-9]{4})/([0-9]{2})/$‘, views.publishadd,name=‘ddd‘), -3 有名分组:url(r‘^publishadd/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$‘, views.publishadd,name=‘ddd‘), -在模板层: -1 无参数:{% url ‘ddd‘ %} -2 无名分组的:{% url ‘ddd‘ 2018 12 %} -3 有名分组:{% url ‘ddd‘ 2018 12 %} 还可以 {% url ‘ddd‘ year=2018 mounth=12 %} -在视图层: from django.shortcuts import reverse 在视图函数里: 1 无参数:url=reverse(‘ddd‘) 2 无名分组:url=reverse(‘ddd‘,args=(2018,12,)) 3 有名分组:url=reverse(‘ddd‘,args=(2018,12,)) 还可以 url=reverse(‘ddd‘,kwargs={‘year‘:2018,‘mounth‘:12})
5.路由分发
1 在不同的app里创建urls.py 2 在总路由 -from django.conf.urls import include -url(r‘^blog/‘,include(‘blog.urls‘)), -url(r‘^app01/‘,include(‘app01.urls‘)), 3 在不同的app的urls里配置路由关系 ***重点***总路由,不能加结束符$
6.名称空间
命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。
由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回
我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间
-url(r‘^blog/‘,include(‘blog.urls‘,namespace=‘blog‘)), -子路由:url(r‘^publish/$‘, views.publish,name=‘test‘), -反向解析: -视图层:url = reverse(‘blog:test‘) -模板层:{% url ‘app01:test‘%} ***一般不要用*** 子路由:url(r‘^publish/$‘, views.publish,name=‘app01_test‘),
7.伪静态
-路由:url(r‘^book/(?P<id>d+.html)‘,views.book), -访问:http://127.0.0.1:8000/book/4.html
以上是关于django的views直接传一段html代码调用模板中的js函数。的主要内容,如果未能解决你的问题,请参考以下文章