为了账号安全,请及时绑定邮箱和手机立即绑定

请问在Django中views如何设置全局变量?

/ 猿问

请问在Django中views如何设置全局变量?

慕仰1329654 2019-09-19 14:14:40

Django中views如何设置全局变量


查看完整描述

6 回答

?
胡子哥哥

问题在于test = 1实际上是定义了一个局部变量test,它隐藏了全局作用域中的test变量。

要指明使用全局的test变量,需要使用global关键字。

12345678910111213from django.http import HttpResponse test = 0 def a(request):    global test    test = 1    return HttpResponse('view a: test = %d' % test)     def b(request):    global test    test += 1    return HttpResponse('view b: test = %d' % test)


查看完整回答
反对 回复 2019-09-22
?
烧仙草VB

简单使用的话,不要使用整数这种不可变的对象类型。使用列表或者字典。比如:

1234567test = [0]def a(request):    test[0+= 1    passdef b(request):    print(test[0])    pass


查看完整回答
反对 回复 2019-09-22
?
噜噜哒

直接使用 GET 方法传值

即 设置 查看书籍详情的超链接地址

1 <td><a href="book/detail/{{ book.isbn }}/">查看书籍详情</a></td>

这样在点击链接的时候,就会发送类似请求 http://*****.**/book/detail/123456/

然后配置 urls.py  设定相应处理函数

然后 views.py 中相应函数接收 {{bkko.isbn}} 参数   get_object_or_404(Book, isbn) 即可



查看完整回答
反对 回复 2019-09-22
?
一只甜甜圈

首先,在django 视图函数中,传递 obj_list = [1, 2, 3] 类似这样的一个列表。 def show_data(request): obj_list = [1, 2, 3] pass return render_to_response('index.html', {'obj_list': obj_list})然后在 index.html 模板文件中

查看完整回答
反对 回复 2019-09-22
?
莫回无

1. 这是行不通的。看一看这ModelChoiceField工作原理:
try:
key = self.to_field_name or 'pk'
value = self.queryset.get(**{key: value})
except self.queryset.model.DoesNotExist:
raise ValidationError(self.error_messages['invalid_choice'])
return value
你不能随意添加到它。 使用ChoiceField代替和定制处理数据。
class TestForm(forms.Form):
mychoicefield = forms.ChoiceField(choices=QS_CHOICES)
def __init__(self, *args, **kwargs):
super(TestForm, self).__init__(*args, **kwargs)
self.fields['mychoicefield'].choices = \
list(self.fields['mychoicefield'].choices) + [('new stuff', 'new')]
def clean_mychoicefield(self):
data = self.cleaned_data.get('mychoicefield')
if data in QS_CHOICES:
try:
data = MyModel.objects.get(id=data)
except MyModel.DoesNotExist:
raise forms.ValidationError('foo')
return data

2. 看来,你只是想使这些表单字段是可选的。不要让坚硬的自己。请参阅有关的规定标志着一个表单域。
lead = forms.ModelChoiceField(queryset=People.objects.filter(poc__in=('lead', 'sr.lead')), required=False)

3. 你有PK Person对象'无'? 我想你应该
self.fields['lead'] = forms.ModelChoiceField(queryset = Pepole.objects.filter(poc__in = ('lead','sr.lead')), empty_label="None")
self.fields['lead2'] = forms.ModelChoiceField(queryset = Pepole.objects.filter(role__in = ('lead','sr.lead')), empty_label="None")
编辑: 既然你一个modelchoicefield,我认为所有的选择将是要么机型或者不选。 通过修改传递给构造函数的modlechoicefield,如QuerySet的你可以“扩展”该类型的选择:
qs = People.objects.filter(poc__in = ('lead','sr.lead'))
ext = People.objects.filter(role__in = ('lead', 'sr.lead'))
qs = qs | ext
self.fields['lead'] = forms.ModelChoiceField(queryset = qs, empty_label='None')
or for updating
self.fields['lead'].queryset = qs





查看完整回答
反对 回复 2019-09-22
?
慕妹3242003

如果你是使用django1.7以上,那么自带migrations功能,可以在生成迁移文件后,打开0001_initial.py(类似这样的文件, 需要与你对应的app关联起来,就是models所在的路径下中的migrations文件夹),然后修改里面中models中对应的class model(),然后找到类似这个
operations = [
migrations.CreateModel(...),
# mysql specific
migrations.RunSQL('alter table 表名 auto_increment=9995'),#数据库不同,语句可能不同
]

其实这个可以通过修改数据库中的表进行操作。这样比较快。自己多找点资料吧。


查看完整回答
反对 回复 2019-09-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信