html5不用django怎么写if(2023年最新整理)

导读:本篇文章首席CTO笔记来给大家介绍有关html5不用django怎么写if的相关内容,希望对大家有所帮助,一起来看看吧。

django中{%if %}如何引用{%for%} 变量

settings.py中的设置:

STATICFILES_DIRS = (

\'templates/static\',

)

urls.py中设置:

url(r\'^staticfiles/(?Ppath.*)$\',\'django.views.static.serve\',{\'document_root\':settings.STATICFILES_DIRS, \'show_indexes\': True}),

html中引用方式:

link href=\"/staticfiles/css/test.css\" rel=\"stylesheet\" type=\"text/css\"

这样设置完,文件是找到了,但是会出现编码错误,错误行是:

C:\\Python27\\lib\\mimetypes.py in enum_types, line 249

在网上找了半天,找到了解决编码错误的办法,

在mimetypes.py文件中,添加

reload(sys)

sys.setdefaultencoding(\'gb18030\')

html5不用django怎么写if(2023年最新整理)  第1张

django模板里面的if语句怎么写?

{% if title %}

    div id=\"title-bar\"

        span id=\"content\"{{ title }}/span

    /div

{% endif %}

这个是我项目里一个代码片段。

如果解决了您的问题请采纳!

如果未解决请继续追问

django if判断语法应该怎么写

你可以将这个判断放在python的view里,然后将结果作为一个变量传递进去。这样就解决了。

我印象中template中并不所有的python 语法都支持。

有ifequal,似乎没有ifgreat, 似乎if (offset-30)也不成。

所以还是把这个判断放在view里。

html/django语法问题。

你用的是django1.5+吗,现在url标签里面的内容已经需要加引号了。比如

a href=\"{%url logout%}\"注销/a

改成

a href=\"{%url \'logout\'%}\"注销/a

我是怎么做到使用django动态定义表单的

from django.utils.translation import ugettext_lazy as _

from django import forms

from django.forms.formsets import BaseFormSet

from django.forms.fields import FileField

from django.forms.util import ValidationError

from django.shortcuts import render_to_response

from django.contrib.formtools.wizard import FormWizard

from ddtcms.office.equipment.models import Equipment,Characteristic,CharacteristicValue

class EquipmentForm(forms.ModelForm):

class Meta:

model = Equipment

class CharacteristicValueForm(forms.Form):

def clean(self):

a=self.fields

s=self.data

self.cleaned_data = {}

# 下面的这一段for 是从 django的forms.py中的 full_clean 中复制来的

for name, field in self.fields.items():

# value_from_datadict() gets the data from the data dictionaries.

# Each widget type knows how to retrieve its own data, because some

# widgets split data over several HTML fields.

value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))

try:

if isinstance(field, FileField):

initial = self.initial.get(name, field.initial)

value = field.clean(value, initial)

else:

value = field.clean(value)

self.cleaned_data[name] = value

if hasattr(self, \'clean_%s\' % name):

value = getattr(self, \'clean_%s\' % name)()

self.cleaned_data[name] = value

except ValidationError, e:

self._errors[name] = self.error_class(e.messages)

if name in self.cleaned_data:

del self.cleaned_data[name]

#cl=self.cleaned_data

#debug()调试用的,查看cl的值,主要是看self.cleaned_data的值,如果return了,就看不到了

return self.cleaned_data

class EquipmentCreateWizard(FormWizard):

def done(self, request, form_list):

return render_to_response(\'equipment/done.html\',

{

\'form_data\': [form.cleaned_data for form in form_list],

})

def get_form(self, step, data=None):

\"Helper method that returns the Form instance for the given step.\"

form = self.form_list[step](data, prefix=self.prefix_for_step(step), initial=self.initial.get(step, None))

if step == 1:

if data:

cg = data.get(\'0-category\', 1)

cs = Characteristic.objects.all().filter(category__id=cg)

for c in cs:

form.fields[\'Characteristic-\'+str(c.id)] = forms.CharField(label = c.name)

g=form.fields

#debug()

return form

# 从wizard.py中复制过来进行更改的.

def render(self, form, request, step, context=None):

\"Renders the given Form object, returning an HttpResponse.\"

old_data = request.POST

prev_fields = []

if old_data:

hidden = forms.HiddenInput()

# Collect all data from previous steps and render it as HTML hidden fields.

for i in range(step):

old_form = self.get_form(i, old_data)

hash_name = \'hash_%s\' % i

prev_fields.extend([bf.as_hidden() for bf in old_form])

prev_fields.append(hidden.render(hash_name, old_data.get(hash_name, self.security_hash(request, old_form))))

if step == 1:

cg = old_data.get(\'0-category\', 1)

cs = Characteristic.objects.all().filter(category__id=cg)

for c in cs:

form.fields[\'Characteristic-\'+str(c.id)] = forms.CharField(label = c.name)

g=form.fields

#debug()

if step == 2:

debug()

return super(EquipmentCreateWizard, self).render(form, request, step, context=None)

def get_template(self, step):

return \'equipment/wizard_%s.html\' % step

EquipmentCreateWizard其实也可以放在views.py中,而且我觉得更合理一点.

在EquipmentCreateWizard 中,我试着修改过process_step 函数,但是得不到正确的结果,后来修改了get_form,都是想从django的formtools的wizard.py中复制过来再进行修改的.

get_form的修改也没有得到正确的结果.后来就修改render函数,在第2步的时候,我将动态参数个数显示出来了.但是到最后结束done的环节,取得的formdata中,第二个form没有数据,就是一个空的{},

于是我又重新修改get_form函数,无非就是判断是不是第二步,然后给第二个form动态添加几个field:

1

2

3

4

5

6

7

if step == 1:

cg = old_data.get(\'0-category\', 1)

cs = Characteristic.objects.all().filter(category__id=cg)

for c in cs:

form.fields[\'Characteristic-\'+str(c.id)] = forms.CharField(label = c.name)

g=form.fields

#debug()

这段代码在get_form和 render中都有,都是判断是不是第2步,然后就根据第1步中选择的设备的分类来查询到具体的分类,再根据分类来获取该种分类的设备有哪些参数,然后根据参数个数修改form的参数field的个数.

\'Characteristic-\'+str(c.id)是用来以后保存数据的时候,split这个字符串,得到参数的id,并在参数值表中保存Characteristic-1,Characteristic-2...的value.

g=form.fields

#debug()

用来断点查看参数field有多少个,是否修改成功.

=========================

1

2

3

4

5

6

7

8

9

from django.conf.urls.defaults import *

from ddtcms.office.equipment.forms import EquipmentForm,CharacteristicValueForm,EquipmentCreateWizard

urlpatterns = patterns(\'ddtcms.office.equipment.views\',

url(r\'^$\', \'index\', name=\"equipment_index\"),

url(r\'^add/$\', \'equipment_create\', name=\"equipment_create\"),

url(r\'^add-by-wizard/$\',EquipmentCreateWizard([EquipmentForm, CharacteristicValueForm]), name=\"equipment_create_by_wizard\"), )

以上代码,csdnbolg 自动过滤了 $符号,我加了上去,可能有不对的地方.

==========================

wizard_0.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{% block content %}

h2添加/修改设备向导/h2

p第 {{ step }} 步, 共 {{ step_count }} 步./p

p填写设备基本情况/p

form method=\"POST\" action=\"\"{% csrf_token %}

table

{{ form }}

/table

input type=\"hidden\" name=\"{{ step_field }}\" value=\"{{ step0 }}\" /

{{ previous_fields|safe }}

input type=\"submit\" value=\"Submit\" /

/form

{% endblock %}

===================

wizard_1.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{% block content %}

h2添加/修改设备向导/h2

p第 {{ step }} 步, 共 {{ step_count }} 步./p

p填写设备参数, 如果没有要填写的内容, 请直接点击确定./p

form method=\"POST\" action=\"\"{% csrf_token %}

table

{{ form }}

/table

input type=\"hidden\" name=\"{{ step_field }}\" value=\"{{ step0 }}\" /

{{ previous_fields|safe }}

input type=\"submit\" value=\"Submit\" /

/form

{% endblock %}

====================

done.html

1

2

3

4

5

6

7

8

{% block content %}

h2添加/修改设备向导/h2

p您已经成功添加了一个设备./p

{{form_data}}

{% endblock %}

============

还可以用另外的form来实现formwizard,就是第一个form1,主要用来让用户选择设备的分类,form2就根据前面的来动态生成参数的表单.原理是一样的.

还有就是写2个view来模拟formwizard,第一个view增加一个设备,第二个view带设备id这个参数即可,可以很有效的增加设备的参数.

如何正确使用 CBVs

Class-based views是Django为解决建站过程中的常见的呈现模式而建立的. 在这节中, 我们着重讲一下CBVs的使用技巧和一般原则.

1. CBVs的使用原则

代码越少越好

永远不要重复代码

View应当只包含呈现逻辑, 不应包括业务逻辑

保持view逻辑清晰简单

不要将CBVs用作403, 404, 500的错误处理程序

保持mixin简单明了

2. 如何使用mixin

在编程中mixin是指为继承它的class提供额外的功能, 但它自身却不能单独使用的类. 在具有多继承能力的编程语言中, mixin可以为类增加额外功能或方法. 在Django中, 我们可以使用mixin为CBVs提供更多的扩展性, 当然在类继承过程中, 我们推荐以下原则:

Django自身提供的View永远在最右边

mixin依次在以上view的左边

mixin永远继承自Python的object类型

在这里顺便推荐一个很好的django库: django-braces. 该库中提供众多django的mixin, 可以方便我们日常使用.

以下是一个简单地例子, TemplateView是django自身提供的基本View, 因此在最右边; FreshFruitMixin则在TemplateView左边; FreshFruitmixin继承自object:

from django.views.generic import TemplateView

class FreshFruitMixin(object):

def get_context_data(self, **kwargs):

context = super(FreshFruitMixin, self).get_context_data(**kwargs)

context[\"has_fresh_fruit\"] = True

return context

class FruitFlavorView(FreshFruitMixin, TemplateView):

template_name = \"fruit_flavor.html\"

3. 如何使用Django自身的CBV

CBVs在功能上的可扩展性, 牺牲的是简单性, 一个CBV最多的时候拥有8个import关系. (如果希望进一步了解这些继承关系, 可以使用Classy Class-Based Views进行查看.) 所以要弄懂那个View最适合当下的场景对于开发人员也是一个挑战. 为了减少CBVs的使用难度, 我们将这些View和基本的用法列在下表中, 为了显示方便, 名字前的django.views.generic前缀皆省去:

名字 目的 例子

View 基本View, 可以在任何时候使用 见后面详细介绍

RedirectView 重新定向到其他URL 将访问\"/log-in/\"的用户重新定向到\"/login/\"

TemplateView 显示Django HTML template 一般网站中使用模板显示的页

ListView 显示对象列表 文章列表页

DetailView 显示对象详情 文章详细页

FormView 提交From 网站联系我们或emai订阅form

CreateView 创建对象 创建新文章页

UpdateView 更新对象 修改文章页

DeleteView 删除对象 删除文章页

Generic date views 显示一段时间内的对象 按时间归类的博客

4. CBVs的使用技巧

a. 限定访问权限

在django tutorial中介绍了如何一起使用django.contrib.auth.decorators.login_required和CBV, 这是一个典型的错误例子.

还好, 我们有django-braces. 在django-braces中已经提供了一个LoginRequiredMixin:

# myapp/views.py

from django.views.generic import DetailView

from braces.views import LoginRequiredMixin

from .models import Article

class ArticleDetailView(LoginRequiredMixin, DetailView):

model = Article

b. 在form提交成功后执行代码

当需要在form提交成功后执行自定义的代码时, 可以使用form_valid()方法, form_valid()方法返回的是django.http.HttpResponseRedirect:

# myapp/views.py

from django.views.generic import CreateView

from braces.views import LoginRequiredMixin

from .models import Article

class ArticleCreateView(LoginRequiredMixin, CreateView):

model = Article

fields = (\'title\', \'slug\', \'content\')

def form_valid(self, form):

# 自定义的代码逻辑写在这里

return super(ArticleCreateView, self).form_valid(form)

c. 在form提交不成功后执行代码

当需要在form提交不成功后执行自定义的代码时, 可以使用form_invalid()方法, form_invalid()方法返回的也是django.http.HttpResponseRedirect:

# myapp/views.py

from django.views.generic import CreateView

from braces.views import LoginRequiredMixin

from .models import Article

class ArticleCreateView(LoginRequiredMixin, CreateView):

model = Article

def form_invalid(self, form):

# 自定义的代码逻辑写在这里

return super(ArticleCreateView, self).form_invalid(form)

5. CBV和form如何结合使用

下面我们介绍一下常见的django form和CBV结合使用的模式, 首先我们定义一个Article model方便举例:

# myapp/models.py

from django.db import models

from django.core.urlresolvers import reverse

STATUS = {

(0, \'zero\'),

(1, \'one\'),

}

class Article(models.Model):

title = model.CharField(max_length=255)

slug = model.SlugField()

review_num = models.IntegerField(default=0, choices=STATUS)

def get_absolute_url(self):

return reverse(\"article_detail\", kwargs={\"slug\": self.slug})

a. Views和ModelForm

下面的例子中, 我们利用django.contrib.messages和CBVs构建一套创建, 更新和显示一篇article的view, 包括:

ArticleCreateView: 用于创建新article

ArticleUpdateView: 用于更新article

ArticleDetailView: 用于确认创建或更新后的article

# myapp/views.py

from django.contrib import messages

from django.views.generic import CreateView, UpdateView, DetailView

from braces.views import LoginRequiredMixin

from .models import Article

class ArticleActionMixin(object):

@property

def success_msg(self):

return NotImplemented

def form_valid(self, form):

messages.info(self.request, self.success_msg)

return super(ArticleActionMixin, self).form_valid(form)

class ArticleCreateView(LoginRequiredMixin, ArticleActionMixin, CreateView):

model = Article

fields = (\'title\', \'slug\', \'review_num\')

success_msg = \"Article Created!\"

class ArticleUpdateView(LoginRequiredMixin, ArticleActionMixin, UpdateView):

model = Article

fields = (\'title\', \'slug\', \'review_num\')

success_msg = \"Article Updated!\"

class ArticleDetailView(DetailView):

model = Article

接下来是template

{# templates/myapp/article_detail.html #}

{% if messages %}

ul class=\"messages\"

{% for message in messages %}

li{ message } /li

/ul

{% endif %}

b. Views和Form

下面我们以搜索article功能为例子, 介绍一下CBV和form的常见使用样式, 在article列表页中点击搜索按钮, 显示搜友符合条件的article列表:

# myapp/views.py

from django.views.generic import ListView

from .models import Article

class ArticleListView(ListView):

model = Article

def get_queryset(self):

queryset = super(ArticleListView, self).get_queryset()

q = self.request.GET.get(\'q\')

if q:

return queryset.filter(title__icontains=q)

return queryset

然后可以使用include以下tenplate呈现搜索form:

{# templates/myapp/_article_search.html #}

form action=\"{% url \"article_list\" %} method=\"GET\"\"

input type=\"text\" name=\"q\"/

button type=\"submit\"搜索/

/form

6. 单独使用View

只用django.views.generic.View, 而不用FBV来构建所有django项目中的view也是可行的, 这也没有你所想象的那么复杂. 使用View的好处是, 我们不需要写许多内套式的if语句, 我们可以直接覆盖使用View的get(), post()等方法:

from django.shortcuts import get_object_or_404, render, redirect

from django.views.generic import View

from braces.views import LoginRequiredMixin

from .forms import ArticleForm

from .models import Article

class ArticleView(LoginRequiredMixin, View):

def get(self, request, *args, **kwargs):

article = get_object_or_404(Article, pl=kwargs[\'slug\'])

return render(request,

\"myapp/article_detail.html\",

{\"article\": article}

)

def post(sele, request, *args, **kwargs):

article = get_object_or_404(Article, pl=kwargs[\'slug\'])

form = ArticleForm(request.POST)

if form.is_valid():

form.save()

return redirect(\"myapp:article\", article.slug)

结语:以上就是首席CTO笔记为大家整理的关于html5不用django怎么写if的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于html5不用django怎么写if的相关内容别忘了在本站进行查找喔。

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:26
下一篇 2023-09-23 13:26

相关推荐

发表回复

登录后才能评论