我正在使用Python的ConfigParser来创建配置文件.我想检查某个部分是否定义了特定选项,如果有,则获取该值.如果没有定义选项,我只想继续没有任何特殊行为.似乎有两种方法可以做到这一点.
if config.has_option('Options', 'myoption'):
OPTION = config.get('Options', 'myoption')
Run Code Online (Sandbox Code Playgroud)
要么:
try:
OPTION = config.get('Options', 'myoption')
except ConfigParser.NoOptionError:
pass
Run Code Online (Sandbox Code Playgroud)
一种方法比另一种方法更受欢迎吗?在if涉及较少的线路,但我偶尔读到try/ except在很多情况下被认为更Python.
鉴于字典看起来像这样:
{
'Color': ['Red', 'Yellow'],
'Size': ['Small', 'Medium', 'Large']
}
Run Code Online (Sandbox Code Playgroud)
如何创建一个结合了第一个字典键的各种值的字典列表?我想要的是:
[
{'Color': 'Red', 'Size': 'Small'},
{'Color': 'Red', 'Size': 'Medium'},
{'Color': 'Red', 'Size': 'Large'},
{'Color': 'Yellow', 'Size': 'Small'},
{'Color': 'Yellow', 'Size': 'Medium'},
{'Color': 'Yellow', 'Size': 'Large'}
]
Run Code Online (Sandbox Code Playgroud) 我在博客应用程序中使用Django基于类的通用视图.我的一个视图显示了具有特定标记的帖子列表.我可以将此视图写ListView为帖子,按标签过滤.或者我可以将此视图编写为DetailView标记,并将相关帖子添加到上下文中.
一种方式比其他方式更合适 - 或Pythonic?
这种ListView方法似乎更具语义性,因为我想要的是一个帖子列表,但它也稍微复杂一些.它要求我覆盖两种方法.这种DetailView方法只需要我覆盖一种方法.
class PostTagView(ListView):
"""Display all blog posts with a given tag."""
queryset = Post.objects.published()
def get_context_data(self, **kwargs):
context = super(PostTagView, self).get_context_data(**kwargs)
context['tag'] = get_object_or_404(Tag, slug=self.kwargs['slug'])
return context
def get_queryset(self, **kwargs):
queryset = super(PostTagView, self).get_queryset()
return queryset.filter(tags__slug=self.kwargs['slug'])
class TagDetailView(DetailView):
"""Display all blog posts with a given tag."""
model = Tag
def get_context_data(self, **kwargs):
context = super(TagDetailView, self).get_context_data(**kwargs)
context['object_list'] = Post.objects.published().filter(tags__slug=self.kwargs['slug'])
return context
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的模型:
class Item(models.Model):
...
publish_date = models.DateTimeField(default=datetime.datetime.now)
...
Run Code Online (Sandbox Code Playgroud)
还有一个看起来像这样的经理:
from datetime import datetime
class ItemManager(Manager):
def published(self):
return self.get_query_set().filter(publish_date__lte=datetime.now()
Run Code Online (Sandbox Code Playgroud)
一个看起来像这样的视图:
class ItemArchive(ArchiveIndexView):
queryset = Item.objects.published()
date_field = 'publish_date'
Run Code Online (Sandbox Code Playgroud)
我的想法是,我可以调用Item.objects.published()并获取所有已发布的查询集Items.
问题是Django似乎datetime.now()在服务器启动时在管理器中执行调用,然后缓存该值.因此,如果今天是5月24日,并且我创建了Item一个发布日期为5月23日,并且在5月22日启动了服务器,那么5月23日的项目将不会显示在ItemArchive视图中.一旦我重新启动Apache,5月23日项目就会在视图中正确显示.
datetime.now()每次调用管理器时,如何强制Django执行?
我想修改updatetime具有特定扩展名的文件的vim .我已尝试通过在我的行中添加以下行来完成此操作~/.vimrc:
autocmd BufRead,BufNewFile *.t set updatetime=60000
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用.当我打开带有.t扩展名和类型的文件时,:set ut?我会看到默认值updatetime=4000.
我有一个运行Django,uWSGI和Nginx的项目.目前我使用默认的Django管理站点,服务于example.com/admin.我想改变它,以便管理站点仅在admin.example.com.
做这个的最好方式是什么?
我曾经考虑过要开始一个全新的Django项目,admin.example.com但是使用与运行的项目相同的数据库设置example.com,但我希望有更优雅的东西,因为这会涉及在项目之间复制很多设置和应用程序.基本上两者之间的唯一区别是,安装了管理站点和URL模式,而不会安装.
(我的理由是最终想要使用google auth proxy之类的东西来保护管理站点,但是非管理员登录会通过正常的身份验证后端.看起来我可以通过指定Django使用HTTP Basic Auth来实现这一点admin.example.com,但坚持使用默认后端example.com.)
python ×4
django ×3
caching ×1
configparser ×1
datetime ×1
dictionary ×1
django-admin ×1
django-views ×1
nginx ×1
python-2.7 ×1
uwsgi ×1
vim ×1