我正在使用Django 1.5.1,我正在经历一些翻译的"奇怪行为".我正在使用ugettext并ugettext_lazy在同一个Python文件中.如果我将导入组织为:
from django.utils.translation import ugettext as trans
from django.utils.translation import ugettext_lazy as _
Run Code Online (Sandbox Code Playgroud)
要么
from django.utils.translation import ugettext as trans, ugettext_lazy as _
Run Code Online (Sandbox Code Playgroud)
trans("string")运行makemessages命令时会跳过标记为的字符串.
但是,如果我不重命名,ugettext它适用于两个版本:
from django.utils.translation import ugettext
from django.utils.translation import ugettext_lazy as _
Run Code Online (Sandbox Code Playgroud)
要么
from django.utils.translation import ugettext, ugettext_lazy as _
Run Code Online (Sandbox Code Playgroud)
现在trans("string")效果很好.
那么,是否有人知道为什么这个导入重命名导致重命名的函数不被调用?这是一个实际的Python"限制"我在同一个模块中重命名多个函数时我不知道吗?
UPDATE
经过一些测试,我意识到即使在应用程序中使用以下代码创建一个空的python模块也不起作用:
from django.utils.translation import ugettext_lazy as translate
a = translate("string")
Run Code Online (Sandbox Code Playgroud)
但是,如果使用_别名,它可以工作:
from django.utils.translation import ugettext_lazy as _
a = …Run Code Online (Sandbox Code Playgroud) 我需要包含两个按钮或链接,以允许用户更改英语和西班牙语之间的语言.我已经阅读了文档并尝试了这个:
<form action="/i18n/setlang/" method="post">{% csrf_token %}
<input name="language" type="hidden" value="es" />
<input type="submit" value="ES" />
</form>
Run Code Online (Sandbox Code Playgroud)
但是,每次单击该按钮时,页面都会重新加载,但语言根本不会更改.我错过了什么吗?
注意:我没有设置next,因为我只想用所需语言重新加载当前页面.
如果我使用docs提供的默认表单,结果是相同的:页面重新加载但语言没有改变:
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go" …Run Code Online (Sandbox Code Playgroud) 我正在使用django-allauth和Django 1.5.1,我在设置时遇到了一些问题:
1.配置 urls.py
文档说您必须将以下内容添加到urls.py文件中:
urlpatterns = patterns('',
...
(r'^accounts/', include('allauth.urls')),
...
)
Run Code Online (Sandbox Code Playgroud)
问题是我已经调用了一个自定义应用程序accounts,我已经使用了以下URL模式:
(r'^accounts/', include('accounts.urls')),
Run Code Online (Sandbox Code Playgroud)
所以我在这里使用accounts/正则表达式URL 进行命名冲突.我的问题是:我可以将allauthURL模式重命名为(r'^auth/', include('allauth.urls'))没有问题,或者这样做是不安全的,最好将我自己的URL重命名为(r'^users/', include('users.urls'))(并将我的帐户应用程序重命名为用户以获得命名一致性).
2.自定义allauth默认模板
自定义登录等默认模板的正确方法是什么?我认为直接修改库不是最好的方法.我想它应该通过templates目录使用一些具体的目录层次结构来完成.另外,我不知道是否base.html必须提供某种文件来覆盖这些模板,或者base.html可以毫无问题地使用所有页面扩展的网站.你能用这个来说明我吗?
3.管理员登录表单在第一次访问时显示登录和注销
当我在一些登录和注销后访问管理面板时,会显示历史记录,但如果我刷新页面则会消失.我认为这必须与django消息有关:

4.设定 SOCIALACCOUNT_PROVIDERS
字典设置是SOCIALACCOUNT_PROVIDERS可选的还是必须设置?
5.当用户使用第三方应用登录时,如何计算密码?
创建用户时,它有一个密码,但是如何计算?并且...它是否有用或者它只是这个必填字段的占位符?用户可以使用它进行本地登录吗?
谢谢!
我有一个带有utf-8标头的dummie Python模块,如下所示:
# -*- coding: utf-8 -*-
a = "á"
print type(a), a
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:
<type 'str'> á
Run Code Online (Sandbox Code Playgroud)
但是我认为声明为utf-8的Python模块中的所有字符串文字都应该是自动类型unicode的str.我错过了什么或者这是正确的行为吗?
为了获得a作为unicode字符串,我使用:
a = u"á"
Run Code Online (Sandbox Code Playgroud)
但这似乎不是很"礼貌",也不实用.有更好的选择吗?
我有一个结构(简化)如下所示的包:
mypackage/
__init__.py
setup.py
module1.py
module2.py
mysubpackage/
__init__.py
mysubmodule1.py
mysubmodule2.py
Run Code Online (Sandbox Code Playgroud)
我正在使用 setup.py 的配置,如下所示:
from setuptools import setup, find_packages
setup(
name = "mypackage",
version = "0.1",
author = "Foo",
author_email = "foo@gmail.com",
description = ("My description"),
packages=find_packages(),
)
Run Code Online (Sandbox Code Playgroud)
的默认where参数find_packages()是'.',但它不包括我的顶级模块(module1.py 或 module2.py)。但是,所有子模块和子包在运行时都会添加python setup.py build。
如何在不将 setup.py 上移一级的情况下也添加顶级 Python 模块?
注意:这是一个自我回答的问题.
我正在尝试使用Python代码调整图像大小,但我收到以下奇怪的错误:
Traceback (most recent call last):
File "resize.py", line 5, in <module>
logo.save("StartMyProjects_resized.png", format="PNG")
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1439, in save
save_handler(self, fp, filename)
File "/usr/lib/python2.7/dist-packages/PIL/PngImagePlugin.py", line 572, in _save
ImageFile._save(im, _idat(fp, chunk), [("zip", (0,0)+im.size, 0, rawmode)])
File "/usr/lib/python2.7/dist-packages/PIL/ImageFile.py", line 481, in _save
e = Image._getencoder(im.mode, e, a, im.encoderconfig)
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 399, in _getencoder
return apply(encoder, (mode,) + args + extra)
TypeError: an integer is required
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码是:
import Image
logo = Image.open("my_image.png")
logo = logo.resize((100, 100), Image.ANTIALIAS)
logo.save("my_image_resized.png")
Run Code Online (Sandbox Code Playgroud) 我正在使用Python 2.7.3在Ubuntu 12.04 x64上工作,我刚刚将Django 1.5.4站点移植到virtualenv 1.7.1.2.
但是,我注意到,从活动的virtualenv运行Python命令要比使用系统的Python安装时慢得多.例如,python manage.py validate使用系统Python的runnig 持续约1秒,而在virtualenv环境中运行的同一命令持续约4秒.这是正常的吗?我错过了什么吗?使用Apache + virtualenv部署此站点时,是否会出现效率问题?
注意:当本地Django开发服务器运行时,我没有注意到使用该站点时的效率问题.它似乎只影响从virtualenv中的shell运行的python命令......这是真的吗?
UPDATE1:
在这里你有一个我实际得到的时间的例子:
enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found
real 0m1.049s
user 0m0.648s
sys 0m0.120s
enric@developer:~/Documentos/workspace/EurekaStart$ source env/bin/activate
(env)enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found
real 0m5.261s
user 0m0.968s
sys 0m1.032s
Run Code Online (Sandbox Code Playgroud)
更新2:
我已经做了进一步的测试,并将virtualenv更新到最新的版本1.10.1,我注意到时间已经改善了,但只是一点点(在0.5s和1s之间).我也尝试使用--system-site-packages标志创建env,时间要好得多,但仍然比使用系统的默认Python慢.这是时代:
使用env创建而不使用system-site-packages:
(env)enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py validate
0 errors found
real 0m4.648s
user 0m1.008s
sys 0m0.824s
Run Code Online (Sandbox Code Playgroud)
使用env2创建使用system-site-packages:
(env2)enric@developer:~/Documentos/workspace/EurekaStart$ time python manage.py …Run Code Online (Sandbox Code Playgroud) 我的问题是...如果我们尝试在 startActivity() 之后执行一些代码,我们会在当前 Activity 的 onPause() 被调用之前完全执行吗?也就是说,我不知道 startActivity() 是否会在包含它的方法到达末尾时实际调用(该finish()方法会发生这种情况)。
我有一个示例,在该示例中,我想要在detach()基于某些条件启动新 Activity 后创建一个对象(具有数据库连接),但我需要此对象来评估一个条件。我知道我可以检查该条件并detach()在第一个之前存储布尔值和它if,但我想知道以下代码是否“合法”。
谢谢!
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
School selectedSchool = new School((Cursor)l.getItemAtPosition(position));
mSharedPreferences.edit()
.putLong(DatabaseManager.SCHOOL_ID, selectedSchool.getIdOpenErp())
.commit();
School.SchoolManager schoolManager = new School.SchoolManager(this);
Long[] sessionIdsOpenErpOfSelectedSchool = schoolManager.getSessionIdsOpenErp(selectedSchool);
if (sessionIdsOpenErpOfSelectedSchool.length > 0) {
if (schoolManager.isPreviousWorkingSchoolPresent()) { // line 10
Intent iParticipationManagement = new Intent(this, ParticipationManagement.class);
startActivity(iParticipationManagement);
} else {
Intent iSelectExistingSession = …Run Code Online (Sandbox Code Playgroud) 我itertools.chain在Python中使用方法将几个Django链接Querysets在一起.通过这样做,我没有触及数据库,这是我需要的有效行为.但是,我正在使用第三方库对这些结果进行分页,此库仅接受列表和查询集对象.使用链对象调用它时,我收到以下错误:
Exception Value: 'itertools.chain' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)
库中的那条线(django-pagemore)让我疯狂的是:
objects = self.objects[page0*self.per_page:1+page*self.per_page]
Run Code Online (Sandbox Code Playgroud)
这里的问题是,当使用链时,你无法切片.
我知道我可以使用list()方法轻松地将链对象转换为列表,但是这将评估整个查询集,并且这可以包含数千个项目.
经过一些关于如何计算Python对象大小的研究后,
我做了一些测试和使用sys.getsizeof(cPickle.dumps(content))(其中content一个是链中的一个对象)给了我一个值15,915 bytes,所以一个包含3000个这些对象的链需要45.53 MBaprox!
python ×8
django ×5
android ×1
django-i18n ×1
image ×1
login ×1
onpause ×1
setuptools ×1
unicode ×1
utf-8 ×1
virtualenv ×1