1

私はdjangoから始めたばかりです(正直に言うと、Pythonも)

現在の URL から self.slug を切り取ってテンプレートに返すモデル メソッドを取得しようとしています。

これは私が試した方法です:

class Category(models.Model):
    ...
    def remove_filter(self):
        url = HttpRequest.get_full_path()
        slug = '/' + self.slug
        return url.replace(slug, '')

しかし、ご想像のとおり、うまくいきません。

テンプレートのスニペット:

{% for object in active_filters %}
    <li><a href="{{ object.remove_filter }}"><i class="icon-remove"></i></a>{{ object }}</li>
{% endfor %}

ここでの私の主な目標は、現在のオブジェクトのスラッグを削除して URL を変更したフロントエンド アイコンを作成することです。

ビューを介してそれを行う方法はわかりませんが、どんな提案も受け付けています。

def category_page(request, url):
    slugs = url.split('/')
    active = Category.objects.filter(slug__in=slugs)
    sorted_slugs = []
    for i in active:
        sorted_slugs.append(i.slug)
    if slugs != sorted_slugs:
        url = '/'.join(sorted_slugs)
        return redirect('http://127.0.0.1:8000/catalog/' + url)
    inactive = Category.objects.exclude(slug__in=slugs)
    return render(request, 'category.html', {'active_filters': active,
                                              'inactive_filters': inactive})

ありがとう。

4

2 に答える 2

2

すべてのアクティブなスラッグのリストをテンプレートに送信し、カスタム テンプレート フィルターを構築して、変更された URL を構築できます。

ビュー.py

# Send your list of active slugs to the template

return render(request, 'category.html', {
    'active_filters': active,
    'inactive_filters': inactive,
    'slugs': slugs,
})

tags_and_filters.py

import copy

from django import template

register = template.Library()


@register.filter(name='remove_filter')
def remove_filter(category, slugs): 
    copied_slugs = copy.copy(slugs)
    slug = category.slug
    if slug in copied_slugs:
        copied_slugs.remove(slug)
    return '/'.join(copied_slugs)

あなたのテンプレート

{% for object in active_filters %}
<li>
  <a href="{{ object|remove_filter:slugs }}"><i class="icon-remove"></i></a>{{ object }}
</li>
{% endfor %}
于 2012-12-24T02:17:19.633 に答える
0

remove_filterメソッドは現在のリクエストにアクセスできません。HttpRequestはクラスであり、現在のリクエストインスタンスではありません。

カスタムタグまたはフィルターremove_filterとして書き直すことをお勧めします。そうすれば、関数はカテゴリにアクセスしてインスタンスをリクエストできます。設定でもリクエストテンプレートコンテキストプロセッサをアクティブ化する必要があります。

于 2012-12-24T02:01:57.653 に答える