小编Cau*_*ons的帖子

ugettext和ugettext_lazy函数在Python Django中不被makemessages识别

我正在使用Django 1.5.1,我正在经历一些翻译的"奇怪行为".我正在使用ugettextugettext_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)

python django internationalization

7
推荐指数
2
解决办法
4039
查看次数

尝试从Django模板更改语言的问题

我需要包含两个按钮或链接,以允许用户更改英语和西班牙语之间的语言.我已经阅读了文档并尝试了这个:

<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)

python django internationalization django-i18n

7
推荐指数
2
解决办法
1万
查看次数

django-allauth配置疑惑

我正在使用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.当用户使用第三方应用登录时,如何计算密码?

创建用户时,它有一个密码,但是如何计算?并且...它是否有用或者它只是这个必填字段的占位符?用户可以使用它进行本地登录吗?

谢谢!

python django login django-allauth

6
推荐指数
1
解决办法
2635
查看次数

声明为utf-8的模块中的Python unicode字符串文字

我有一个带有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模块中的所有字符串文字都应该是自动类型unicodestr.我错过了什么或者这是正确的行为吗?

为了获得a作为unicode字符串,我使用:

a = u"á"
Run Code Online (Sandbox Code Playgroud)

但这似乎不是很"礼貌",也不实用.有更好的选择吗?

python unicode utf-8 unicode-literals

5
推荐指数
2
解决办法
5452
查看次数

如何让python setuptools找到顶级模块

我有一个结构(简化)如下所示的包:

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 setuptools

5
推荐指数
1
解决办法
3137
查看次数

在Python中使用PIL调整图像大小时的TypeError

注意:这是一个自我回答的问题.

我正在尝试使用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 image python-imaging-library

4
推荐指数
1
解决办法
3671
查看次数

Python virtualenv非常慢

我正在使用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)

python django virtualenv

3
推荐指数
2
解决办法
5078
查看次数

我们可以在 startActivity() 暂停之前执行代码吗?

我的问题是...如果我们尝试在 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)

android onpause android-activity

2
推荐指数
1
解决办法
5496
查看次数

故障排除'itertools.chain'对象没有属性'__getitem__'

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 django

2
推荐指数
1
解决办法
6950
查看次数