Django-filter: django-filter๊ฐ€ django-pagination๊ณผ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ฌธ์„œํ™”

์— ๋งŒ๋“  2009๋…„ 08์›” 13์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: carltongibson/django-filter

๋‘˜ ๋‹ค ์ž˜ ์–ด์šธ๋ ค์„œ ๋งŒ์ง€์ž‘๊ฑฐ๋ฆฌ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ์–ด์š”. ๋ฌธ์„œ์˜ ์˜ˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ:

{% block content %}
    <form action="" method="get">
        {{ f.form.as_p }}
        <input type="submit" />
    </form>

    {% autopaginate f.qs 40 as filter_list %}

    {% for obj in filter_list %}
        {{ obj.name }} - ${{ obj.price }}<br />
    {% endfor %}

    {% paginate %}
{% endblock %}

ํ•ต์‹ฌ์€ ํŽ˜์ด์ง€ ๋งค๊น€์˜ _as_ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  20 ๋Œ“๊ธ€

๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์žฅ๊ณ  ์ •๋ ฌ๊ณผ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ django-sorting์€ ํŽ˜์ด์ง€ ๋งค๊น€ ์ „์— ๊ฐ€์•ผ ํ•˜๊ณ  'as' ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ _์—†์Šต๋‹ˆ๋‹ค_:

{% autosort f.qs as actionlog %}
{% autopaginate actionlog 30 %}

http://github.com/directeur/django-sorting/issues/#issue/4 ์— ์—…์ŠคํŠธ๋ฆผ์— ์ œ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์œ„์˜ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

http://code.google.com/p/django-pagination/issues/detail?id=59#c0

๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์žฅ๊ณ  ํŽ˜์ด์ง€ ๋งค๊น€์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 5ํŽ˜์ด์ง€์—์„œ ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜๋ฉด ํ•„ํ„ฐ๊ฐ€ "ํŽ˜์ด์ง€" GET ๋ณ€์ˆ˜๋„ ์ „๋‹ฌํ•˜๋ฏ€๋กœ ํ•„ํ„ฐ๋ง๋œ ํŽ˜์ด์ง€์—์„œ ์ด๋ฏธ 5ํŽ˜์ด์ง€์— ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•  ๋•Œ django-pagination์ด ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ URL์—์„œ ์ œ์™ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค ...

MD๊ฐ€๋ฅดํŠธ,

jQuery์™€ jQuery Back Button & Query(BBQ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ํŽ˜์ด์ง€ ๋ณ€์ˆ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ: http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery.ba-bbq.min.js"></script>
<script type="text/javascript">
  // on page load complete
  $(function(){
    // force all filter links to return to page 1
    $('#changelist-filter a').querystring('page=1');
  });
</script>

์‚ฌ์šฉ์ž๊ฐ€ ํ•„ํ„ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” "ํŽ˜์ด์ง€"์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 1๋กœ ๊ฐ•์ œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์˜ˆ์—์„œ ๋ชจ๋“  ํ•„ํ„ฐ๋Š” ID๊ฐ€ "changelist-filter"์ธ div ๋‚ด์— ์žˆ๋Š” ๋งํฌ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. jQuery ์„ ํƒ๊ธฐ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

mdgart, ์กฐ๋‚˜ํ† ๋‚˜๋“ค๋Ÿฌ,

javascript์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํŽ˜์ด์ง€ ๋ณ€์ˆ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ 'page' ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ FilterSet์— ์ „๋‹ฌํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์„œ์˜ ์˜ˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
def product_list(์š”์ฒญ):
๋ฐ์ดํ„ฐ = request.GET.copy()
๋ฐ์ดํ„ฐ์˜ 'ํŽ˜์ด์ง€'์ธ ๊ฒฝ์šฐ:
๋ธ ๋ฐ์ดํ„ฐ['ํŽ˜์ด์ง€']
f = ProductFilter(๋ฐ์ดํ„ฐ, queryset=Product.objects.all())
return render_to_response('my_app/template.html', {'ํ•„ํ„ฐ': f})
๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋งค์šฐ ๊น”๋”ํ•œ ์†”๋ฃจ์…˜ richardbarran, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ฐ์‚ฌ ํ•ด์š”. django-pagination์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ๋ฅผ ํŒจ์น˜ํ•˜๋ ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์ž‘์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์˜ ํ˜•์‹์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? :-(
docutils๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— (์ ์–ด๋„ ๋‚ด ์ปดํ“จํ„ฐ์—์„œ๋Š”) ์ฒ˜์Œ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ค ์ œ์•ˆ?

Richard, ์ฒ˜์Œ์ด์ง€๋งŒ sphinx(http://sphinx.pocoo.org/)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

autopaginate ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ˆœ๊ฐ„ "'fooFilter' ์œ ํ˜•์˜ ๊ฐ์ฒด์— len()์ด ์—†์Šต๋‹ˆ๋‹ค" ์œ ํ˜• ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜๊ณ  django-pagination์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”!

ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๋•๋ถ„์— ๋งŽ์€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” django-pagination ๋ฐ django-sorting์— ๋Œ€ํ•œ github ๋งํฌ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ์ด๋Ÿฌํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ค‘ ์ผ๋ถ€๋ฅผ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ป๋Š”๋‹ค :

/ads/search/์˜ TemplateSyntaxError
๋ Œ๋”๋งํ•˜๋Š” ๋™์•ˆ VariableDoesNotExist ๋ฐœ๊ฒฌ: u'[{}, {\'csrf_token\' ...์—์„œ ํ‚ค [sorted_objects] ์กฐํšŒ ์‹คํŒจ

์ด ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ

    {% autosort filter.qs as sorted_objects %}
    {% autopaginate sorted_objects 10 as object_list %}

    {% for object in object_list %}
        {{ object }}
    {% endfor %}

    {% paginate %}  

    <ul>
        <li>{% anchor price "First Field" %}</li>
        <li>{% anchor surface "Other Field" %}</li>
    </ul>

๊ฐ์‚ฌ ํ•ด์š” !

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” django-sorting์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์‹ค์ œ๋กœ ๋„์›€์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค!

์ฃผ์˜

ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” django-pagination ๋ฐ django-sorting์— ๋Œ€ํ•œ github ๋งํฌ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ์ด๋Ÿฌํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ค‘ ์ผ๋ถ€๋ฅผ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ป๋Š”๋‹ค :

/ads/search/์˜ TemplateSyntaxError
๋ Œ๋”๋งํ•˜๋Š” ๋™์•ˆ VariableDoesNotExist ๋ฐœ๊ฒฌ: u'[{}, {\'csrf_token\' ...์—์„œ ํ‚ค [sorted_objects] ์กฐํšŒ ์‹คํŒจ

์ด ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ

  {% autosort filter.qs as sorted_objects %}
  {% autopaginate sorted_objects 10 as object_list %}

  {% for object in object_list %}
      {{ object }}
  {% endfor %}

  {% paginate %}  

  <ul>
      <li>{% anchor price "First Field" %}</li>
      <li>{% anchor surface "Other Field" %}</li>
  </ul>

๊ฐ์‚ฌ ํ•ด์š” !

๊ทธ๋ž˜์„œ ๋‹ค์Œ์€ ์ด์ „ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์ž‘๋™ํ•˜๋Š” pip ์š”๊ตฌ ์‚ฌํ•ญ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์žฅ๊ณ  ํ•„ํ„ฐ==0.5.3
์žฅ๊ณ  ํŽ˜์ด์ง€ ๋งค๊น€==1.0.7
-e git://github.com/lukeman/django-sorting.git#egg =django_sorting

๋‚ด ํฌํฌ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค.
https://github.com/camilonova/django-sorting

์ผ๋ฐ˜ ๋ณด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ django-filter๋กœ ํŽ˜์ด์ง€ ๋งค๊น€ ๋ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ์˜ˆ์—์„œ ์ผ๋ฐ˜ ๋ณด๊ธฐ ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์งˆ๋ฌธ์„ ์ดํ•ดํ•œ๋‹ค๋ฉด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค: https://github.com/ouhouhsami/django-geoads/blob/master/geoads/views.py

๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ django-sorter๋ผ๊ณ  ํ•˜๋Š” django-sorter๋ฅผ ํ›จ์”ฌ ๋” ์™„๋ฒฝํ•˜๊ฒŒ ๋Œ€์ฒดํ•˜๋Š” ๊ธ€์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. http://django-sorter.readthedocs.org/

์ด์Šˆ ํŠธ๋ž˜์ปค๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์ผํ™˜์œผ๋กœ ์ด๋ฒˆ ์ด์Šˆ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€ ์ดํ›„๋กœ 2๋…„์ด ๋„˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํŽ˜์ด์ง€ ๋งค๊น€/์ •๋ ฌ ์†”๋ฃจ์…˜๊ณผ์˜ ํ†ตํ•ฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ณด๋‚ด๋ ค๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์ •๋ง ๊ธฐ์˜๊ฒŒ ๊ฒ€ํ† ํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ๋‹ค์Œ ๋ฒˆ์— _IRL_์ด ์˜ฌ ๋•Œ ๋‹ค์‹œ ๋Œ์•„์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!!!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰