项目欧拉和其他编码竞赛通常有最长的运行时间或人们吹嘘他们的特定解决方案运行的速度.使用python,有时候这些方法有点像kludgey - 即添加时间码__main__
.
分析python程序运行多长时间的好方法是什么?
我正在尝试编写(我认为会是)一个简单的bash脚本,它将:
第1步工作得很好,但我似乎无法激活virtualenv.对于那些不熟悉virtualenv的人,它会创建一个activate
激活虚拟环境的文件.在CLI中,您可以使用它运行它source
source $env_name/bin/activate
Run Code Online (Sandbox Code Playgroud)
其中$ env_name显然是安装虚拟环境的目录的名称.
在我的脚本中,在创建虚拟环境之后,我将激活脚本的路径存储如下:
activate="`pwd`/$ENV_NAME/bin/activate"
Run Code Online (Sandbox Code Playgroud)
但是当我打电话时source "$activate"
,我得到了这个:
/home/clawlor/bin/scripts/djangoenv: 20: source: not found
Run Code Online (Sandbox Code Playgroud)
我知道它$activate
包含激活脚本的正确路径,实际上我甚至在调用之前测试文件是否在那里source
.但source
它本身似乎无法找到它.我也尝试在CLI中手动运行所有步骤,其中一切正常.
在我的研究中,我发现了这个脚本,它与我想要的类似,但也做了许多其他我不需要的事情,比如将所有虚拟环境存储在〜/ .virtualenv目录中(或者其他任何内容) $ WORKON_HOME).但在我看来,他正在创造通往我的道路activate
,并source "$activate"
以与我相同的方式打电话.
这是完整的脚本:
#!/bin/sh
PYTHON_PATH=~/bin/python-2.6.1/bin/python
if [ $# = 1 ]
then
ENV_NAME="$1"
virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME
activate="`pwd`/$ENV_NAME/bin/activate"
if [ ! -f "$activate" ]
then
echo "ERROR: activate not found at $activate"
return 1
fi
source "$activate"
else
echo 'Usage: …
Run Code Online (Sandbox Code Playgroud) 在我的views.py中,我正在构建一个包含两元组的列表,其中元组中的第二项是另一个列表,如下所示:
[ Product_Type_1, [ product_1, product_2 ],
Product_Type_2, [ product_3, product_4 ]]
Run Code Online (Sandbox Code Playgroud)
在普通的旧Python中,我可以像这样迭代列表:
for product_type, products in list:
print product_type
for product in products:
print product
Run Code Online (Sandbox Code Playgroud)
我似乎无法在我的Django模板中做同样的事情:
{% for product_type, products in product_list %}
print product_type
{% for product in products %}
print product
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我从Django得到这个错误:
渲染时捕获异常:zip参数#2必须支持迭代
当然,模板中有一些HTML标记,而不是print语句.Django模板语言不支持元组解包吗?或者我是以错误的方式来做这件事的?我要做的就是显示一个简单的对象层次结构 - 有几种产品类型,每种都有几种产品(在models.py中,Product有Product_type的外键,简单的一对多关系).
显然,我对Django很新,所以任何输入都会受到赞赏.
我为Django模型创建了一个自定义管理器,它返回一个包含objects.all()子集的QuerySet.我需要这是模型的默认经理,因为我还创建自定义的标签,这将可以从任何模型(由自变量指定)的内容,并且需要使用默认经理指定的模型.一切正常,除了 - Django Admin也使用此特定模型的默认管理器,这意味着并非所有模型实例都出现在管理员中.
Django文档没有帮助:
如果您使用自定义管理器对象,请注意第一个管理器Django遇到(按照它们在模型中定义的顺序)具有特殊状态.Django将类中定义的第一个Manager解释为"默认"管理器,Django的几个部分(尽管不是管理应用程序)将专门为该模型使用该Manager. (Django Managers文档)
管理员不应该使用默认的管理器,但它似乎在我的情况下.请注意,我还明确添加了默认管理器objects
:
subset = CustomManager() # the default manager
objects = models.Manager() # the one I want admin to use
Run Code Online (Sandbox Code Playgroud)
如何指定管理员应使用哪个Manager?
我正在使用Django和Pinax开始一个新的Web应用程序项目.我希望能够为我的用户提供像Wordpress和其他网站这样的独特域名:username.wordpress.com
.我不知道如何使用Django来处理这个问题,因为url解析逻辑(在urls.py中)以域名后的url开头.
更具体地说,将有多组用户,每组具有唯一的名称.不确定这有什么不同,但我想我应该提一下.
有没有办法我可以操纵http请求,以便URL看起来像Django,好像网址是这样的www.domain.com/groupname
,但仍然在浏览器地址栏中显示为groupname.domain.com
?
我正在使用django-compressor和django-staticfiles(外部版本,我在Django 1.2上).
当我尝试加载我的网站时,我收到一个错误:
TemplateSyntaxError: Caught UncompressableFileError while rendering: 'css/facebox.css' isn't accesible via COMPRESS_URL ('/static/') and can't be compressed
Run Code Online (Sandbox Code Playgroud)
我已经验证COMPRESS_URL
等于STATIC_URL
,并且该文件实际上可以通过该URL访问.
看看django-compressor代码,我发现抛出异常的地方:
def get_basename(self, url):
try:
base_url = self.storage.base_url
except AttributeError:
base_url = settings.COMPRESS_URL
# I added the following print statement:
print "url: %s, base_url: %s" % (url, base_url)
if not url.startswith(base_url):
raise UncompressableFileError("'%s' isn't accesible via "
"COMPRESS_URL ('%s') and can't be "
"compressed" % (url, base_url))
Run Code Online (Sandbox Code Playgroud)
{% compress css %}
我的模板中的第一个块是这样的:
{% compress css %}
<link …
Run Code Online (Sandbox Code Playgroud) 我有一个基本上只是一个字符串的模型(django.db.models.CharField).将存储此模型的多个实例.我如何将这些值用作表单中的选项?
为了说明,该模型可以BlogTopic
.我想让用户能够选择一个或多个主题进行订阅.
我开始写一些像:
from mysite.blog.models import BlogTopic
choices = [(topic.id, topic.name) for topic in BlogTopic.objects.all()]
class SubscribeForm(forms.Form):
topics = forms.ChoiceField(choices=choices)
Run Code Online (Sandbox Code Playgroud)
但我不确定何时choices
会定义.我假设只在首次导入模块时(即启动Django时).显然这不是一个很好的方法.
这似乎是一个常见的要求,但我似乎找不到任何例子.我怀疑我可能会遗漏一些明显的东西.无论如何,提前感谢您的答案.
我有一个优惠券模型,它有一些字段来定义它是否处于活动状态,以及一个只返回实时优惠券的自定义管理器.优惠券有一个FK到项目.
在对项目的查询中,我试图注释可用的有效优惠券的数量.但是,Count聚合似乎在计算所有优惠券,而不仅仅是活跃优惠券.
# models.py
class LiveCouponManager(models.Manager):
"""
Returns only coupons which are active, and the current
date is after the active_date (if specified) but before the valid_until
date (if specified).
"""
def get_query_set(self):
today = datetime.date.today()
passed_active_date = models.Q(active_date__lte=today) | models.Q(active_date=None)
not_expired = models.Q(valid_until__gte=today) | models.Q(valid_until=None)
return super(LiveCouponManager,self).get_query_set().filter(is_active=True).filter(passed_active_date, not_expired)
class Item(models.Model):
# irrelevant fields
class Coupon(models.Model):
item = models.ForeignKey(Item)
is_active = models.BooleanField(default=True)
active_date = models.DateField(blank=True, null=True)
valid_until = models.DateField(blank=True, null=True)
# more fields
live = LiveCouponManager() # defined first, should …
Run Code Online (Sandbox Code Playgroud) 我不是Python的新手,而是一个有正则表达式的完整新手(在我的待办事项列表中)
我试图使用python re来转换字符串,如
[Hollywood Holt](http://www.hollywoodholt.com)
Run Code Online (Sandbox Code Playgroud)
至
<a href="http://www.hollywoodholt.com">Hollywood Holt</a>
Run Code Online (Sandbox Code Playgroud)
和一个字符串
*Hello world*
Run Code Online (Sandbox Code Playgroud)
至
<strong>Hello world</strong>
Run Code Online (Sandbox Code Playgroud) 我有一个模型形式,可以创建一个新模型或编辑一个现有模型 - 这很简单,应该可以工作,但由于某种原因我每次都得到一个新的实例.
场景是这是电子商务订单的第一步.用户必须填写一些描述订单的信息(存储在模型中).我创建模型,保存它,然后重定向到下一个视图,以便用户输入他们的cc信息.我将模型粘贴在会话中,因此我不必在下一个视图中进行数据库查找.第二个(cc信息)视图的模板中有一个链接,允许用户返回第一个视图来编辑他们的订单.
# forms.py
class MyForm(forms.ModelForm):
class Meta:
fields = ('field1', 'field2')
model = MyModel
# views.py
def create_or_update(request):
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
m = form.save(commit=False)
# update some other fields that aren't in the form
m.field3 = 'blah'
m.field4 = 'blah'
m.save()
request.session['m'] = m
return HttpResponseRedirect(reverse('enter_cc_info'))
# invalid form, render template
...
else:
# check to see if we're coming back to edit an existing model
# this part works, I …
Run Code Online (Sandbox Code Playgroud)