小编ism*_*ail的帖子

在将查询集中发送到模板之前是否可以替换查询集中的值?

想知道在将查询集返回的值发送到模板之前是否可以更改它。比如说你有一堆记录

Date | Time | Description
10/05/2010 | 13:30 | Testing...
Run Code Online (Sandbox Code Playgroud)

ETC...

但是,根据星期几,时间可能会发生变化。然而,这是静态的。例如,周一时间始终为 15:00。

现在您可以添加另一个表来配置特殊情况,但对我来说这似乎有点过头了,因为这是一条规则。在将其发送到模板之前,您将如何替换该值?

我考虑过使用新的 if 标签(if day=1),但这更多的是业务逻辑而不是表示。

在自定义模板标签中测试了这一点

def render(self, context):
    result = self.model._default_manager.filter(from_date__lte=self.now).filter(to_date__gte=self.now)
    if self.day == 4:
        result = result.exclude(type__exact=2).order_by('time')
    else:
        result = result.order_by('type')
    result[0].time = '23:23:23'
    context[self.varname] = result
    return ''
Run Code Online (Sandbox Code Playgroud)

但是它仍然显示来自数据库的结果,这与模板的“惰性”评估有什么关系吗?

谢谢!

更新响应下面的评论:它在数据库中没有存储错误,它存储正确但是有一个小的侧面情况,该值需要更改。

例如,我有一个“起始日期”和“截止日期”,我的查询会检查今天的日期是否在这些日期之间。现在,他们可以设置一整年的从日期到日期,并且可以处理特殊情况(例如星期一)。但是,如果您想存储在数据库中,则必须捕获更多记录以满足副情况。也就是说,您将捕获相同的信息,只是为了满足时间变化的那一天的需要。(并且时间总是在同一天发生变化,并且始终相同)

使用解决方案更新(基于下面 KillianDS 的回答)在 models.py 中我定义了一个自定义属性:

@property
def get_corrected_time(self):
    from datetime import time
    day = datetime.now().weekday()
    if day == 0 or day == 1:
        self.time = time(12,30)
    return self.time
Run Code Online (Sandbox Code Playgroud)

并在模板中

   {{ object.get_corrected_time|time:"P" …
Run Code Online (Sandbox Code Playgroud)

django django-templates django-models

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

学习ruby,这些代码片段意味着什么?

def winner(p1, p2)
  wins = {rock: :scissors, scissors: :paper, paper: :rock}
  {true => p1, false => p2}[wins[p1] == p2]
end
Run Code Online (Sandbox Code Playgroud)

从这个问题:HW不可能?:"在没有使用条件的情况下在ruby中创建一个岩石剪刀程序"

ruby

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

编写函数的两种不同方法(map vs loop)

忙着一些代码,并且有一个函数,它基本上需要每个值都是列表的字典,并返回具有最大列表的键.

我写了以下内容:

def max_list(dic):
    if dic:
        l1 = dic.values()
        l1 = map(len, l1)
        l2 = dic.keys()
        return l2[l1.index(max(l1))]
    else:
        return None
Run Code Online (Sandbox Code Playgroud)

其他人写了以下内容:

def max_list(dic):
    result = None
    maxValue = 0
    for key in dic.keys():
        if len(dic[key]) >= maxValue:
            result = key
            maxValue = len(dic[key])
    return result
Run Code Online (Sandbox Code Playgroud)

如果有的话,这将是"正确"的方法.我希望这不被视为社区维基(即使代码有效),试图找出哪个是问题最好的模式.

python

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

使用lambda这段python代码有什么问题?

一些python代码不断抛出无效的语法错误:

stat.sort(lambda x1, y1: 1 if x1.created_at < y1.created_at else -1)
Run Code Online (Sandbox Code Playgroud)

python

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

Django模板For循环:你如何为第一条记录执行操作?

我知道django故意不允许模板中有很多逻辑.但是,有时您需要评估某些内容并根据更改您的选项.

如何更改模板中的值或仅在第一条记录中插入内容?但是你仍然想要完成其余的工作.例如,我的模板代码如下:

    {% for object in object_list %}
     <div id="t{{ object.id }}-header" class="content_headings title_highlight" >{{ object.title }}</div>
     <div id="t{{ object.id }}-content">
         ......
Run Code Online (Sandbox Code Playgroud)

PHP模板中的类似代码:

<div id="t<?php if ($i != 1) { echo $i-1; } ?>-header" class="content_headings<?php if ($i == 1) { ?> title_highlight<?php } ?>" ><?php the_title(); ?></div>  
<div id="t<?php if ($i != 1) { echo $i-1; } ?>-content">
Run Code Online (Sandbox Code Playgroud)

django django-templates

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

Ruby/ROR - 语法错误关键字END(所有块都结束)

收到以下错误:

syntax error, unexpected keyword_ensure, expecting keyword_end  
Run Code Online (Sandbox Code Playgroud)

syntax error, unexpected $end, expecting keyword_end
Run Code Online (Sandbox Code Playgroud)

用代码

  <% if user.admin? do %>
        <%= form_tag({:controller => '/admin/link', :action=> 'link', :id => @link.id}) do %>

        <%= render :partial => "link_form" %>

        <% end %>
    <% end %>
Run Code Online (Sandbox Code Playgroud)

虽然我已经完成了大约10次代码,但我的所有块都已关闭.答案可能很容易,因为我是一个红宝石/新手.代码也不是很难,只有大约15行.

ruby ruby-on-rails

0
推荐指数
1
解决办法
141
查看次数