在django视图等中,您可以访问request.GET ['variablename'],因此在您的视图中,您可以返回执行以下操作:
myvar = request.GET['myvar']
Run Code Online (Sandbox Code Playgroud)
实际的request.GET ['myvar']对象类型是:
<class 'django.http.QueryDict'>
Run Code Online (Sandbox Code Playgroud)
现在,如果你想为同一参数名传递多个变量,即
http://example.com/blah/?myvar=123&myvar=567
换句话说,您希望为参数myvar返回一个python 列表
基本上我想做的就是这样
for var in request.GET['myvar']:
print(var)
Run Code Online (Sandbox Code Playgroud)
但是,当您尝试这样时,您只获得在url中传递的最后一个值,即在上面的示例中,您将得到567
shell中的结果将是:
5
6
7
Run Code Online (Sandbox Code Playgroud)
但是,当你打印request.GET它似乎有一个列表,即:
<QueryDict: {u'myvar': [u'123', u'567']}>
Run Code Online (Sandbox Code Playgroud)
好的更新:它的目的是返回最后一个值,我的用例是我需要一个列表.
来自django docs:
的QueryDict.getitem(key)返回给定键的值.如果键具有多个值,则 getitem()将返回最后一个值.如果密钥不存在,则引发django.utils.datastructures.MultiValueDictKeyError.(这是Python标准KeyError的子类,因此您可以坚持捕获KeyError
QueryDict.getlist(key)以Python列表的形式返回带有请求键的数据.如果密钥不存在,则返回空列表.它保证返回某种列表.
更新:如果有人知道为什么django dev已经这样做了,请让我知道,显示一个列表似乎反直觉,它不像一个.不是pythonic!
我目前正在使用WTFORMS创建一个动态选择字段,但它永远不会提交并且验证失败并出现以下错误.
Not a valid choice
Run Code Online (Sandbox Code Playgroud)
我的字段是这样创建的:
area = SelectField()
Run Code Online (Sandbox Code Playgroud)
在视图中,我从数据库抓取选项,如下所示:
form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]
Run Code Online (Sandbox Code Playgroud)
但是,如果我创建静态选项,它会工作.
我正在使用django-registration和django-profile来处理注册和配置文件.我想在注册时为用户创建个人资料.我创建了一个自定义注册表单,并使用以下教程将其添加到urls.py:
本教程中的基本思想是覆盖默认注册表单以同时创建配置文件.
forms.py - 在我的个人资料应用中
from django import forms
from registration.forms import RegistrationForm
from django.utils.translation import ugettext_lazy as _
from profiles.models import UserProfile
from registration.models import RegistrationProfile
attrs_dict = { 'class': 'required' }
class UserRegistrationForm(RegistrationForm):
city = forms.CharField(widget=forms.TextInput(attrs=attrs_dict))
def save(self, profile_callback=None):
new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
password=self.cleaned_data['password1'],
email=self.cleaned_data['email'])
new_profile = UserProfile(user=new_user, city=self.cleaned_data['city'])
new_profile.save()
return new_user
Run Code Online (Sandbox Code Playgroud)
在urls.py中
from profiles.forms import UserRegistrationForm
Run Code Online (Sandbox Code Playgroud)
和
url(r'^register/$',
register,
{'backend': 'registration.backends.default.DefaultBackend', 'form_class' : UserRegistrationForm},
name='registration_register'),
Run Code Online (Sandbox Code Playgroud)
显示表单,我可以在City中输入,但不会在DB中保存或创建条目.
我正在使用Mongoid 3,使用Rails 3.2.9和Unicorn进行制作.想为mongodb建立一个before_fork和after_fork,找到以下代码进行活动记录:
before_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
Rails.logger.info('Disconnected from ActiveRecord')
end
end
after_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
Rails.logger.info('Connected to ActiveRecord')
end
end
Run Code Online (Sandbox Code Playgroud)
Mongoid的相关代码是什么(连接和断开连接)?
更新:
你真的不需要这样做,所以对于想要查看这个问题的人看到:
http://mongoid.org/en/mongoid/docs/rails.html
"独角兽和乘客
当使用Unicorn或Passenger时,每次使用app预加载或智能生成时分叉子进程,Mongoid将自动重新连接到master数据库.如果您手动在应用程序中执行此操作,则可以删除代码."
虽然知道什么是等效的Mongoid代码仍然很有趣.
我目前有一个简单的模型定义,使用django缩略图插件的photoupload功能.
但是当我尝试上传时,它给出了以下错误:
OSError at /admin/products/photo/add/
(13, 'Permission denied')
Run Code Online (Sandbox Code Playgroud)
现在,我知道这似乎是一个权限问题,所以我检查的第一件事是对目录的权限,并将这些更改为777(只是测试),重新启动服务器和fcgi,它仍然给出错误.
追溯
Traceback: File "/usr/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
92. response = callback(request, *callback_args,
**callback_kwargs) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in wrapper
226. return self.admin_site.admin_view(view)(*args,
**kwargs) File "/usr/lib/python2.6/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in inner
186. return view(request, *args, **kwargs) File "/usr/lib/python2.6/dist-packages/django/db/transaction.py" in _commit_on_success
240. res = func(*args, **kw) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in add_view
734. self.save_model(request, new_object, form, change=False) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in save_model
557. obj.save() File "/usr/lib/python2.6/dist-packages/django/db/models/base.py" in save
410. self.save_base(force_insert=force_insert, …
Run Code Online (Sandbox Code Playgroud) 我目前正在编写一些自定义模板标签,但由于某种原因它们无法加载.我的目录结构如下:
MyProj
|
----MyApp
|
|----templatetags
|
|----myapp_tags.py
|----__init__.py
Run Code Online (Sandbox Code Playgroud)
在myapp_tags.py中
from django.template import Library, Node
from myproj.myapp.models import Product
register = Library()
class LatestProductsNode(Node):
def render(self, context):
context['recent_products'] = Product.objects.all()[:5]
return ''
def get_latest_products(parser, token):
return LatestProductsNode()
get_latest_products = register.tag(get_latest_products)
Run Code Online (Sandbox Code Playgroud)
在settings.py中
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'myproj.myapp',
)
Run Code Online (Sandbox Code Playgroud)
在模板中
{% load myapp_tags %}
Run Code Online (Sandbox Code Playgroud)
尝试加载页面时出现的错误:
Exception Type: TemplateSyntaxError Exception Value:
'myapp_tags' is not a valid tag library: Could not load template library from django.templatetags.myapp_tags, No module named myapp_tags
Run Code Online (Sandbox Code Playgroud) 假设您有一个这样的项目设置:
-WebApp
|_ requirements.txt
|_ bootstrap.py (virtualenv bootstrap script)
|_ src
|_ setup.py
|_ develop-app
|_ somecode.py
|_ morecode.py
Run Code Online (Sandbox Code Playgroud)
该bootstrap.py
用的virtualenv创建:
https://virtualenv.pypa.io/en/latest/reference.html#creating-your-own-bootstrap-scripts
现在,整个WebApp目录都是一个git repo(显然不包括virtualenv).目的是创建一个便携式virtualenv/git环境.问题是如果你把它develop-app
放在你的requirements.txt
开发中,它将把它安装在你的virtualenv目录下的/ src下,并将它符号链接到你的虚拟env站点包中.你最终得到的是你的源代码的两个副本 - 一个由git跟踪,另一个在你使用但未被git跟踪的Virtualenv中.
您如何确保git(develop-app
)跟踪的目录中的更改在virtualenv中自动更新?
urllib/urllib2的正常行为是,如果在响应的标头中发送错误代码(即404),则引发异常.
你如何根据不同的错误寻找特定的错误,即(40x或50x),做不同的事情.另外,如何读取返回的实际数据HTML/JSON等(数据通常包含与HTML错误代码不同的错误详细信息)
有什么想法,下面两个命令之间的区别是什么?
命令: manage.py runfcgi method = threaded host = 127.0.0.1 port = 3033
labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs 14558 0.0 2.2 65948 8212 ? Sl Oct19 0:09 python /var/www/django_projects/myproject/manage.py runfcgi method=threaded host=127.0.0.1 port=3033
Run Code Online (Sandbox Code Playgroud)
命令: python manage.py runfcgi host = 127.0.0.1 port = 7021 protocol = fcgi pidfile =/tmp/myproject.fcgi.pid
labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs 21082 0.0 2.8 15440 10472 ? S 22:27 0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs 21083 0.0 2.7 15440 10084 ? S 22:27 0:00 python …
Run Code Online (Sandbox Code Playgroud) django ×5
python ×5
django-forms ×1
django-urls ×1
django-views ×1
flask ×1
heroku ×1
macos ×1
mongodb ×1
mongoid ×1
permissions ×1
pip ×1
profile ×1
pyobjc ×1
registration ×1
spawn-fcgi ×1
unicorn ×1
virtualenv ×1
wtforms ×1