0

車の年、メーカー、シリーズ、ボディ スタイル、色に分類されたレコードのリストを生成するために使用しているこのコードがあります。この方法でさらにカスタマイズしたいと思います。

  • その年については、2004 年までを個別に指定したいと思います...残りは、その他、つまり 2009 年、2008 年、2007 年、2006 年、2005 年、2004 年、その他に分類されます。
  • メーカーについては、人気の高い 6 つのメーカーを表示したいと思います...モデルには、メーカーの人気をプライマリ (最高)、セカンダリ、またはサードの値で割り当てるために使用しているフィールドがあります。残りはその他に分類されます。
  • ボディスタイルとカラーは、その他に該当するレコードが3件未満のものを揃えたいです。

私のコードは以下の通りです:

year_count = vehicle_query.order_by(
  '-common_vehicle__year__year').values('common_vehicle__year__year').
  annotate(count=Count('id'))
make_count = vehicle_query.order_by(
  'common_vehicle__series__model__manufacturer__manufacturer').
  values('common_vehicle__series__model__manufacturer__manufacturer').
  annotate(count=Count('id'))
style_count = vehicle_query.order_by(
  'common_vehicle__body_style__style').values
  ('common_vehicle__body_style__style').annotate(count=Count('id'))
colour_count = vehicle_query.order_by(
  'exterior_colour__exterior_colour').values(
  'exterior_colour__exterior_colour').annotate(count=Count('id'))
4

2 に答える 2

0

私は解決策を得ることができたので、ここで答えを更新するのが良いと思いました:

ヘッドセクションにはこれがあります:

<script type="text/javascript" src="{{ MEDIA_URL }}share/jquery/jquery.min.js"></SCRIPT>
<script type="text/javascript">
(function($) {
$(document).ready(function() {
    //hide the additional content under "Display More"
    $("div.additional_content").hide();

    $("a.more").click(function () { 
        //show or hide the additional content
        $(this).siblings("div.additional_content").toggle();
        //change the attributes and text value of the link toggle
        if($(this).text() == "Display Less"){
            $(this).removeClass("less");
            $(this).addClass("more");
            $(this).html("Display More");
        }else{
            $(this).removeClass("more");
            $(this).addClass("less");
            $(this).html("Display Less");
        }
        return false;
    });             
});
})(jQuery);

次に、使用可能なオプションの数を減らしたい場合はいつでも、次のようにします。

<div class="module_wrap">
  <div class="module"> {% if year_count %} <strong>{% trans "Year" %}</strong> <br />
    {% for item in year_count|slice:":6" %}
    <ul>
      <li> <a href="/inventory/year/{{ item.common_vehicle__year__year }}/">{{ item.common_vehicle__year__year }} ({{ item.count }})</a> {% if request.session.chosen_year %} <a href="/undo_year/"><img src="{{ MEDIA_URL }}img/undo.gif" border="0" alt="Remove Year Filter" title="Remove Year Filter" /></a> {% endif %} </li>
    </ul>
    {% endfor %}
    <div class="additional_content"> {% for item in year_count|slice:"6:" %}
      <ul>
        <li> <a href="/inventory/year/{{ item.common_vehicle__year__year }}/">{{ item.common_vehicle__year__year }} ({{ item.count }})</a></li>
      </ul>
      {% endfor %} </div>
    {% if year_count|slice:"6:" %}<a href="" class="more">Display More</a><br />
    {% endif %} <br />
  </div>
</div>
{% endif %}
于 2009-12-03T05:51:24.797 に答える
0

あなたが求めていることの大部分は、おそらく Django の外部で、代わりにクライアント側の JavaScript で処理する方がよいでしょう。明確にするために、一部を Django で処理することもできますが、そうしない方がクリーンになります。このようにすると、次のような利点があります。

  1. Django テンプレート コードをよりクリーンに
  2. 綺麗に劣化します
  3. 後でインターフェイスを更新 (javascript を変更) することができ、Django テンプレートの破損を心配する必要はありません。

<ul>これを処理するには、タグ (およびおそらくいくつかの引数) を指定すると、そのリストを求めている形式でレンダリングするスクリプトを作成するだけです。

jQuery を使用した簡単な例を次に示します。この例では、jQuery プラグイン パターンを使用して機能をラップします。

あなたのdjangoテンプレートが次のように出力するとしましょう...

<ul>
    <li>Chevy</li>
    <li>Mazda</li>
    <li>Honda</li>
    <li>Ford</li>
    <li>BMW</li>
</ul>

jquery.showmorelist.js

(function($) {

    $.fn.ShowMoreList = function(visibleItemCount) {

        // Wrap parent element
        var parent = $(this).wrap('<div class="show-more-list"></div>').parent();
        var ul = $(this);

        // Enumerate children and hide extras
        var counter = 0;
        $(this).children().filter('li').each(function(){
            counter += 1;
            if (counter > visibleItemCount) {
                $(this).hide();
                $(this).addClass('hidden');
            }
        });

        // Add link and bind click
        var link = $('<a href="#">&gt; Show More</a>').click(function(){
           $(ul).children().filter('.hidden').show();
        });
        $(parent).append(link);
    }

})(jQuery);

page.html

<script type="text/javascript" src="jquery.showmorelist.js"></script>
<script type="text/javascript">
    // On page load...
    $(function() {
            $('ul').ShowMoreList(4);    // Shows only the first 4 items
    });
</script>

これはかなり単純な例であり、「Show More」を「Hide More」に切り替えることはありませんが、コンテキストからそれを理解できるはずです。

于 2009-11-30T20:13:41.603 に答える