2

私は奇妙な問題を抱えています。これは私の見解です:


def get_date_range(this_week=True, last_week=False, older_than_two_weeks=False):

    dates = {}
    d = datetime.today().strftime('%Y-%m-%d')
    dt = datetime.strptime(d, '%Y-%m-%d')
    if this_week:
        this_week_start = dt - timedelta(days = dt.weekday())
        this_week_end = this_week_start + timedelta(days=6)
    elif (last_week or older_than_two_weeks):
        this_week_start = dt - timedelta(days = 14)
        this_week_end = this_week_start + timedelta(days=6)

    dates = {'date_start' :this_week_start, 'date_end' : this_week_end}
    return dates

def load_created_topics_by_time(request):
    """
    created this week, last week, older
    """
    objects={}

    date_range = get_date_range(this_week=True)
    topics_this_week = Topic.objects
                       .filter(is_active=True, date_created__range=(date_range['date_start'],date_range['date_end']))
                       .order_by('-date_created')

    objects['topics_this_week'] = topics_this_week

    date_range = get_date_range(this_week=False,last_week=True)
    topics_last_week = Topic.objects.filter(is_active=True, date_created__range= (date_range['date_start'],date_range['date_end'])).order_by('-date_created')

    objects['topics_last_week'] = topics_last_week

    topics_older_two_weeks = Topic.objects.filter(is_active=True, date_created__lt=date_range['date_start']).order_by('-date_created')[:50]

    objects['topics_older_two_weeks'] = topics_older_two_weeks

    return shortcuts.render(request, 'template.html', objects)

今、自分のマシンで実行すると完全に動作しますが、サーバーからロードすると、「get_date_range」に1回しかヒットしないようです。その関数の結果がキャッシュされているようで、もちろん、結果が台無しになります。

@never_cache はビューではなく関数であるため、使用できません。解決策はありますか?

ありがとう、デビッド

4

1 に答える 1

0

私はまったく同じ種類の問題に遭遇し、それは私を怒らせました!

これは (少なくとも私にとっては) QuerySet レベルでのキャッシングの問題です。何日もの試行錯誤の後、私は最終的に、一般的なクラスベースのビューを使用しget_queryset、カスタム モデル Manager ( https://docs.djangoproject.com/en/1.8 /topics/db/managers/#custom-managers )。

また、「教訓を学んだ」ためなのか、切り替えに関連しているのかはわかりませんが、apache + mod_wsgi から nginx + 手動でコンパイルされた uWSGI (手作業でコンパイルされているという事実は重要ではありません。それは、ディストリビューションで提供されたものではなく、最近のバージョンを使用していることを意味します)。

この回答がお役に立てば幸いです。

于 2015-04-14T06:00:30.530 に答える