Django初探(二)

在创建admin账号及密码后只有通过登录才能访问子页面。

 使admin具有polls的接口,在polls中admin文件中添加如下代码:
     admin.site.register(Question)(need .models.Question django.contrib.admin)
     之后在admin页面中就可以对polls接口进行访问。

 下面对views增加一些细节,用到正则表达式 (?P):分组,除了原有的编号外再指定一个额外的别名。
                 EX:(?abc){2} 匹配abcabc :指定abc有别名id 并匹配2次("{}"指定匹配前一个字符窜若干次)
                  + 与 * 的区别在于一个是匹配前一个1次或任意次,另一个是匹配前一个0次或任意次。


 可以看到urls中对正则表达式的分组取法,直接作为参数传给views中相应的函数并作为展示网页的参数。
 注意这里为参数指定别名,并与views中的参数相符合是必要的。(所以这里的参数顺序是无所谓的)

 通过将字典对象传给模板render可以进行模板渲染,其中数据可以在数据库中选取得到。
 有两种不同的模板渲染方法,一种是传统的template.render方法,其直接返回渲染后的字符串,
 另一种是return render(request, "模板路径", 渲染模板的变量) (django.shortcuts:render)
 后一种方法不用导入 django.http:HttpResponse 及 django.template:loader

 django.shortcuts 提供了一些便捷的函数 如上面快速渲染模板的render 及当要对一个对象按照某个条件寻找值时,
 可以使用get_object_or_404 这是一个很好的将get方法与返回404相结合的简写。(相当于用404进行异常捕获)
 与前面Question.objects.filter相对应的是,提供了get_list_or_404(可能内部封装的也是相同的)

 如果将对象直接作为渲染的条件,如{{question}}这时调用的是对象的__str__属性进行打印。
 这里对于模板渲染的方式,其于调用相应python语句的方法有轻微的不同。
 如 python: question.choice_set.all()
      模板: {{% for choice in question.choice_set.al l%}}

 对于模板的语法规则,可以知道的是对于语句(条件判断或循环需要使用形式{{% statements %}},
 对于一般的渲染语句使用{{statements}})
 当使用判断语句时经常搭配:
     {{% if %}} {{% endif %}} 当满足if的条件时会显式这两者之间的部分
     if 与python内建逻辑相同可以接受 and or not 作为逻辑判断条件。
         但并不允许如python内建的使用多个的符合条件 如:and...or...(为了避免歧义)
    
     相应的{{% endfor %}}作为与{{% for %}}相对应的上述执行相同功能。
         在使用模板for循环的过程中,django 在上述作用域中提供forloop.counter来对循环进行计数。
         可以将其利用模板渲染出,可以用来生成调用的函数参数。
    


 在模板渲染中有一些修改渲染url的方法,
 例如,原模板渲染的方法:
      •

 换一种渲染方法:
    


 这里引用了相应的正则表达式的内容:
     url(r"^(?P[0-9]+)/$", views.detail, name = "detail")
     从行为上其会将相应名称的url相应正则的原始部分提取出来,并利用question.id进行渲染。
 所以好的修改url的方法是在urlpattern 中url的相应正则表达式部分进行修改,而模板渲染部分应当保留上面这种
 “动态加载”的方式。

 上面是对一个app (polls) 的处理方案,但当工程有多个app时,如果另一个app 的view.py某个url也有detail作为名称
 的url,那在模板渲染时进行关于不同app的区分就是必要的,这时需要使用作用域的概念。
 将渲染部分的代码改为:
    

     就会指定使用polls的 view.py中具有detail作为名称的url进行如上渲染。

 一些html基础是要知道的:
     html form标签用于用户设计表单提交,最一般的是form标签包含input标签用于文本输入。
         注意: input没有结束标签。
             input type属性定义类别 其中radio为单选按钮。
                 为input内部添加label标签,会使得input的作用域变大(当鼠标点击label中的文本时,与点击了input
                 相同)。
          br标签表示换行,没有结束标签。






               


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值