我已经回答了一个关于Python绝对导入的问题,我认为我在阅读Python 2.5更新日志和随附的PEP时理解了这一点.但是,在安装Python 2.5并尝试制作正确使用的示例时from __future__ import absolute_import,我意识到事情并不那么清楚.
直接从上面链接的更改日志,这句话准确地总结了我对绝对导入更改的理解:
假设你有一个像这样的包目录:
Run Code Online (Sandbox Code Playgroud)pkg/ pkg/__init__.py pkg/main.py pkg/string.py这定义了一个名为
pkg包含pkg.main和pkg.string子模块的包.考虑main.py模块中的代码.如果它执行语句会发生什么
import string?在Python 2.4和更早的版本,它会先在包的目录进行相对进口看,发现包装/ string.py,导入该文件的内容pkg.string模块,并且该模块被绑定到名字"string"的pkg.main模块的名称空间.
所以我创建了这个确切的目录结构:
$ ls -R
.:
pkg/
./pkg:
__init__.py main.py string.py
Run Code Online (Sandbox Code Playgroud)
__init__.py并且string.py是空的.main.py包含以下代码:
import string
print string.ascii_uppercase
Run Code Online (Sandbox Code Playgroud)
正如所料,使用Python 2.5运行它失败了AttributeError:
$ python2.5 pkg/main.py
Traceback (most recent call last):
File "pkg/main.py", line 2, in <module>
print string.ascii_uppercase
AttributeError: …Run Code Online (Sandbox Code Playgroud) 我想编写一个脚本,其中我使用selenium包,如下所示:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.youtube.com/watch?v=hdw1uKiTI5c")
Run Code Online (Sandbox Code Playgroud)
在获得所需的URL后,我想将Chrome声音静音.我怎么能这样做?这样的事情:
driver.mute()
Run Code Online (Sandbox Code Playgroud)
是否可以与任何其他Web驱动程序?像Firefox或......?
我正在使用django 1.7构建我的第一个站点,并且很难弄清楚如何将变量从点击传递到视图.我的GET也是空的.
我的模板有一个带有Facebook帐户ID的表格,点击后应显示用户管理员的Facebook页面列表.
我的模板:
{% for SocialAccount in accountlist %}
<tr>
<td><a href="{% url 'INI:fbpages' %}">{{ SocialAccount.uid }}</a></td>
<td>{{ SocialAccount.extra_data.first_name }}</td>
<td>{{ SocialAccount.extra_data.last_name }}</td>
<td>{{ SocialAccount.extra_data.email }}</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
和我的观点:
def fbpages(request, fbuser):
djuser = request.user.id
context = RequestContext(request)
fbuser = 1234634
pagelist = facebook.pages(request, djuser, fbuser)
blocks = {'title': 'Facebook Pages',
'pagelist': pagelist}
return render(request, "initiative/ListFBPages.html", blocks)
Run Code Online (Sandbox Code Playgroud)
如果我将ID放在URL中但我不想在URL中公开页面/用户ID,我可以轻松地做到这一点.我觉得这是一个简单的解决方案,但我还没弄清楚.
谢谢你的帮助.
我有一个像下面的javascript结构(嵌套的对象数组)
var categoryGroups = [
{
Id: 1, Categories: [
{ Id: 1 },
{ Id: 2 },
]
},
{
Id: 2, Categories: [
{ Id: 100 },
{ Id: 200 },
]
}
]
Run Code Online (Sandbox Code Playgroud)
我想找到一个匹配Id的子类别对象,假设类别ID都是唯一的.
我在下面有这个,但是想知道是否有更简洁的方法:
var category, categoryGroup, found = false;
for (i = 0; i < categoryGroups.length ; i++) {
categoryGroup = categoryGroups[i];
for (j = 0; j < categoryGroup.Categories.length; j++) {
category = categoryGroup.Categories[j];
if (category.Id === id) {
found = true;
break;
}
} …Run Code Online (Sandbox Code Playgroud) 在关于SO的其他地方的讨论中,我被告知"[m] ost浏览器现在不会执行内联javascript ...".这对我来说是新闻,我一直在研究如何验证这个陈述,以便了解我是否需要调整我维护的某些网站上的代码,以使它们与未来的浏览器兼容.
据我所知,该评论者指的是内容安全策略,这是一个相对较新的提案,如果实施,将限制或完全禁用内联脚本.
但是,我注意到:
这需要使用(当前可选的)HTTP标头或元标记等价物,我怀疑任何网络服务器默认都能发送出去.
该浏览器支持它目前仅限于最新和最伟大的,尤其是在移动.
在这个没有证据表明(对我)说"大多数浏览器"不会成为内联JavaScript 不惜一切,也不是说他们正计划在未来这样的事情.
我的问题基本上是,我错了#3?内联JavaScript支持是否可能正在逐步推出?
顺便说一句,我在SO上问这个问题,因为我认为它可能是一个"实用的,可回答的问题,这是软件开发所特有的".如果其他人认为这太广泛或属于SE的其他地方,我想听听你的建议.提前致谢!
对于Django中的新项目,是否可以使用Python 2.7,或者我应该从Python 3.x开始预期Python 2支持被停用?
Django大约需要多长时间才能支持Python 2分支?
我想在Django模型上创建一个方法,调用它model.duplicate(),复制模型实例,包括指向它的所有外键.我知道你可以这样做:
def duplicate(self):
self.pk = None
self.save()
Run Code Online (Sandbox Code Playgroud)
...但是这样所有相关模型仍然指向旧实例.
我不能简单地保存对原始对象的引用,因为self在执行方法期间指向更改的内容:
def duplicate(self):
original = self
self.pk = None
self.save()
assert original is not self # fails
Run Code Online (Sandbox Code Playgroud)
我可以尝试保存对相关对象的引用:
def duplicate(self):
original_fkeys = self.fkeys.all()
self.pk = None
self.save()
self.fkeys.add(*original_fkeys)
Run Code Online (Sandbox Code Playgroud)
...但是这会将它们从原始记录转移到新记录.我需要将它们复制并指向新记录.
其他地方的几个答案(在此之前我更新了问题)建议使用Python copy,我怀疑它适用于此模型上的外键,但不适用于指向它的另一个模型上的外键.
def duplicate(self):
new_model = copy.deepcopy(self)
new_model.pk = None
new_model.save()
Run Code Online (Sandbox Code Playgroud)
如果你这样做new_model.fkeys.all()(到目前为止遵循我的命名方案)将是空的.
标题基本上都说明了一切.我怎么能告诉pip freeze忽略某些包,喜欢pylint和pep8,和它们的依赖?
我的API中有这部分代码,最近已成为一个瓶颈:
total = results.count()
if request.GET.has_key('offset'):
offset = int(request.GET.get('offset').strip())
results = results.order_by('name')[100*offset:100*(offset+1)]
people = list(results)
Run Code Online (Sandbox Code Playgroud)
请注意,这results是所有人的查询集,并且offset是用于分页的参数.
在这里我可以看到,当我打印connection.queries,我的数据库中获取由打两.count()和list(results).之所以.count()必须处于最顶端是因为我需要所有人的长度(不是100).有没有办法解决这个问题?
我不能git push以正常的方式从我家到Heroku.我尝试在不同的应用程序上使用两个不同的帐户(家庭和工作),使用不同的ssh密钥.这不是一个损坏的回购,因为它可以在我的工作计算机上运行.(事实上,我通常会通过ssh工作和从那里进行部署来解决这个问题,但是那里的力量已经消失了,所以本周末我不能这样做!)
首先,这与其他几十个类似的问题不同,主要是因为我没有收到任何错误.
$ git push heroku master
Connection closed by 50.19.85.132
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)
请注意,它会在连接关闭之前正好挂起60秒,并显示此信息.
$ git push -v heroku master
Pushing to git@heroku.com:myherokuapp.git
Connection closed by 50.19.85.154
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)
heroku keys:add - 命令成功,密钥被添加到我的帐户(在heroku.com上显示,我收到电子邮件),但没有任何变化.
完全重新生成密钥.与上述相同.
heroku …
python ×5
django ×4
python-2.7 ×3
javascript ×2
arrays ×1
git ×1
heroku ×1
mysql ×1
pip ×1
python-2.5 ×1
python-3.x ×1
selenium ×1
ssh ×1
standards ×1