{"id":870,"date":"2021-01-14T11:28:41","date_gmt":"2021-01-14T08:28:41","guid":{"rendered":"https:\/\/www.etemkeskin.com\/?p=870"},"modified":"2021-01-14T11:28:44","modified_gmt":"2021-01-14T08:28:44","slug":"django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2","status":"publish","type":"post","link":"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/","title":{"rendered":"Django&#8217; da Ajax ile Dinamik A\u00e7\u0131l\u0131r Liste Nas\u0131l Yap\u0131l\u0131r?"},"content":{"rendered":"\n<p>Django projelerinde kategori ve buna ba\u011fl\u0131 alt kategorili verilerimiz olabilir. Bunu kullan\u0131c\u0131 aray\u00fcz\u00fcnde a\u00e7\u0131l\u0131r listeler ile formlarda sunabiliriz. Bu yaz\u0131da se\u00e7ilen kategoriye g\u00f6re ba\u011fl\u0131 alt kategorileri sayfay\u0131 yenilemeden dinamik olarak ajax ile backenden nas\u0131l \u00e7ekilir bunu anlataca\u011f\u0131m.<\/p>\n\n\n\n<p>Yaz\u0131l\u0131m dillerini tutaca\u011f\u0131m\u0131z <strong>subject<\/strong> ad\u0131nda bir \u00fcst kategori ve bu kategoriye ba\u011fl\u0131 dillerin i\u00e7eriklerini tutacak  <strong>topic <\/strong>ad\u0131nda alt kategorilerinin oldu\u011fu bir veritaban\u0131 yap\u0131s\u0131 var.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"855\" height=\"302\" src=\"https:\/\/www.etemkeskin.com\/wp-content\/uploads\/2021\/01\/image-2.png\" alt=\"\" class=\"wp-image-820\"\/><\/figure>\n\n\n\n<p>A\u015fa\u011f\u0131daki html templatimizde de g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi sayfay\u0131 render ederken <strong>subjects<\/strong> verimizle birlikte render ediyoruz. A\u00e7\u0131l\u0131r listeden se\u00e7ilen <strong>subject<\/strong>&#8216; e g\u00f6re <strong>Topic<\/strong> a\u00e7\u0131l\u0131r listemizi, backende yapaca\u011f\u0131m\u0131z <strong>ajax<\/strong> requestle verilerimizi \u00e7ekip g\u00fcncelliyece\u011fiz.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">{% csrf_token %}\n&lt;div class=&quot;col-md-6&quot;&gt;\n  &lt;div class=&quot;form-group&quot;&gt;\n    &lt;label for=&quot;inputStatus&quot;&gt;Subject&lt;\/label&gt;\n    &lt;select id=&quot;question-subject&quot; class=&quot;form-control-sm custom-select&quot;&gt;\n      &lt;option selected disabled&gt;Choose a subject&lt;\/option&gt;\n      {% for subject in subjects%}\n      &lt;option value=&quot;{{subject.id}}&quot;&gt;{{subject.title}}&lt;\/option&gt;\n      {% endfor %}\n    &lt;\/select&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n&lt;div class=&quot;col-md-6&quot;&gt;\n  &lt;div class=&quot;form-group&quot;&gt;\n    &lt;label for=&quot;inputStatus&quot;&gt;Topic&lt;\/label&gt;\n    &lt;select id=&quot;question-topic&quot; class=&quot;form-control-sm custom-select&quot; name=&quot;topic&quot;&gt;\n      &lt;option selected disabled&gt;Choose a topic&lt;\/option&gt;\n    &lt;\/select&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;<\/pre><\/div>\n\n\n\n<p>Ajax requesti yapmak i\u00e7in ilk \u00f6nce<strong> jquery <\/strong>k\u00fct\u00fcphanesini sayfam\u0131za eklememiz gerekiyor. <\/p>\n\n\n\n<p>Subject a\u00e7\u0131l\u0131r listemize <code>id=\"question-subject\"<\/code> idsini veriyoruz. Jquery selector ile bu listeyi se\u00e7ip bu listede olan bir de\u011fi\u015fimi <strong>change event<\/strong>i ile alg\u0131l\u0131yoruz. Se\u00e7ilen subject&#8217;in <strong>ID<\/strong>&#8216; sini bir de\u011fi\u015fkene at\u0131yoruz. Daha sonra <strong>get_topics_ajax <\/strong>ismindeki adrese ajax request yap\u0131p requestten d\u00f6nen veriler ile topic listemizi yeniliyoruz.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text\/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;JavaScript&quot;,&quot;modeName&quot;:&quot;js&quot;}\">{% block javascript %}\n&lt;script src=&quot;https:\/\/code.jquery.com\/jquery-3.5.1.js&quot; integrity=&quot;sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH\/C8ycbRAkjPDc=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;\/script&gt;\n&lt;script&gt;\n    $(&quot;#question-subject&quot;).change(function () {\n        const subjectId = $(this).val();  \/\/ Se\u00e7ilen subject' in ID' sini de\u011fi\u015fkene atama \n        $.ajax({                       \/\/ AJAX request' ba\u015flatma\n            type: &quot;POST&quot;,\n            url: '{% url &quot;get_topics_ajax&quot; %}',\n            data: {\n                'subject_id': subjectId,       \/\/ POST parameterlerine subject id' yi ekleme\n                'csrfmiddlewaretoken':$('input[name=csrfmiddlewaretoken]').val(),\n            },\n            success: function (data) {   \/\/ `get_topics_ajax` view fonksiyonundan d\u00f6nen veri\n                let html_data = '&lt;option value=&quot;&quot;&gt;---------&lt;\/option&gt;';\n                data.forEach(function (data) {\n                    html_data += `&lt;option value=&quot;${data.id}&quot;&gt;${data.title}&lt;\/option&gt;`\n                });\n                $(&quot;#question-topic&quot;).html(html_data); \/\/ Serverden gelen veri ile topic listesinin i\u00e7eri\u011fini de\u011fi\u015ftirme\n            }\n        });\n    });\n&lt;\/script&gt;\n{% endblock javascript %}<\/pre><\/div>\n\n\n\n<p>Backendde <code>urls.py<\/code> de ajax requestinin yap\u0131laca\u011f\u0131 url tan\u0131mlayal\u0131m.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;Python&quot;,&quot;modeName&quot;:&quot;python&quot;}\"> path('get-topics-ajax\/', get_topics_ajax, name=&quot;get_topics_ajax&quot;),<\/pre><\/div>\n\n\n\n<p>Gelen url iste\u011fine g\u00f6re \u00e7al\u0131\u015facak fonksiyonumuzu <code>view.py<\/code> de a\u015fa\u011f\u0131daki gibi tan\u0131ml\u0131yoruz. <strong>subject_id<\/strong> ye g\u00f6re ona ba\u011fl\u0131 <strong>topic<\/strong>&#8216; leri veritaban\u0131ndan \u00e7ekiyoruz. <strong>Topic&#8217;<\/strong> leri <strong>json<\/strong> verisi olarak frontende g\u00f6nderiyoruz. E\u011fer bir problem olursa frontende <strong>error<\/strong> mesaj\u0131 g\u00f6nderiyoruz.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;python&quot;,&quot;mime&quot;:&quot;text\/x-python&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;Python&quot;,&quot;modeName&quot;:&quot;python&quot;}\">from quiz.models import Question, Topic, Subject\nfrom django.http import JsonResponse,\n\ndef get_topics_ajax(request):\n    if request.method == &quot;POST&quot;:\n        subject_id = request.POST['subject_id']\n        try:\n            subject = Subject.objects.filter(id = subject_id).first()\n            topics = Topic.objects.filter(subject = subject)\n        except Exception:\n            data['error_message'] = 'error'\n            return JsonResponse(data)\n        return JsonResponse(list(topics.values('id', 'title')), safe = False) <\/pre><\/div>\n\n\n\n<p>Ba\u015far\u0131lar Dilerim.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container\">\n<p><\/p>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Django projelerinde kategori ve buna ba\u011fl\u0131 alt kategorili verilerimiz olabilir. Bunu kullan\u0131c\u0131 aray\u00fcz\u00fcnde a\u00e7\u0131l\u0131r listeler ile formlarda sunabiliriz. Bu yaz\u0131da se\u00e7ilen kategoriye g\u00f6re ba\u011fl\u0131 alt kategorileri sayfay\u0131 yenilemeden dinamik olarak ajax ile backenden nas\u0131l \u00e7ekilir bunu anlataca\u011f\u0131m. Yaz\u0131l\u0131m dillerini tutaca\u011f\u0131m\u0131z subject ad\u0131nda bir \u00fcst kategori ve bu kategoriye ba\u011fl\u0131 dillerin i\u00e7eriklerini tutacak topic ad\u0131nda alt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[32,26],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Django&#039; da Ajax ile Dinamik A\u00e7\u0131l\u0131r Liste Nas\u0131l Yap\u0131l\u0131r? - blog website<\/title>\n<meta name=\"description\" content=\"Django projelerinde kategori ve buna ba\u011fl\u0131 alt kategorili verilerimiz olabilir. Bunu kullan\u0131c\u0131 aray\u00fcz\u00fcnde a\u00e7\u0131l\u0131r listeler ile formlarda sunabiliriz. Bu yaz\u0131da se\u00e7ilen kategoriye g\u00f6re ba\u011fl\u0131 alt kategorileri sayfay\u0131 yenilemeden dinamik olarak ajax ile backenden nas\u0131l \u00e7ekilir bunu anlataca\u011f\u0131m. Yaz\u0131l\u0131m dillerini tutaca\u011f\u0131m\u0131z subject ad\u0131nda bir \u00fcst kategori ve bu kategoriye ba\u011fl\u0131 dillerin i\u00e7eriklerini tutacak topic ad\u0131nda alt kategorilerinin oldu\u011fu bir veritaban\u0131 yap\u0131s\u0131 var.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Django&#039; da Ajax ile Dinamik A\u00e7\u0131l\u0131r Liste Nas\u0131l Yap\u0131l\u0131r? - blog website\" \/>\n<meta property=\"og:description\" content=\"Django projelerinde kategori ve buna ba\u011fl\u0131 alt kategorili verilerimiz olabilir. Bunu kullan\u0131c\u0131 aray\u00fcz\u00fcnde a\u00e7\u0131l\u0131r listeler ile formlarda sunabiliriz. Bu yaz\u0131da se\u00e7ilen kategoriye g\u00f6re ba\u011fl\u0131 alt kategorileri sayfay\u0131 yenilemeden dinamik olarak ajax ile backenden nas\u0131l \u00e7ekilir bunu anlataca\u011f\u0131m. Yaz\u0131l\u0131m dillerini tutaca\u011f\u0131m\u0131z subject ad\u0131nda bir \u00fcst kategori ve bu kategoriye ba\u011fl\u0131 dillerin i\u00e7eriklerini tutacak topic ad\u0131nda alt kategorilerinin oldu\u011fu bir veritaban\u0131 yap\u0131s\u0131 var.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/\" \/>\n<meta property=\"og:site_name\" content=\"blog website\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-14T08:28:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-14T08:28:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.etemkeskin.com\/wp-content\/uploads\/2021\/01\/image-2.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.etemkeskin.com\/#website\",\"url\":\"https:\/\/www.etemkeskin.com\/\",\"name\":\"blog website\",\"description\":\"Etem KESK\\u0130N\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.etemkeskin.com\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/#primaryimage\",\"inLanguage\":\"tr\",\"url\":\"https:\/\/www.etemkeskin.com\/wp-content\/uploads\/2021\/01\/image-2.png\",\"contentUrl\":\"https:\/\/www.etemkeskin.com\/wp-content\/uploads\/2021\/01\/image-2.png\",\"width\":855,\"height\":302},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/#webpage\",\"url\":\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/\",\"name\":\"Django' da Ajax ile Dinamik A\\u00e7\\u0131l\\u0131r Liste Nas\\u0131l Yap\\u0131l\\u0131r? - blog website\",\"isPartOf\":{\"@id\":\"https:\/\/www.etemkeskin.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/#primaryimage\"},\"datePublished\":\"2021-01-14T08:28:41+00:00\",\"dateModified\":\"2021-01-14T08:28:44+00:00\",\"author\":{\"@id\":\"https:\/\/www.etemkeskin.com\/#\/schema\/person\/dcbc30282861ce578b96a79ce8789629\"},\"description\":\"Django projelerinde kategori ve buna ba\\u011fl\\u0131 alt kategorili verilerimiz olabilir. Bunu kullan\\u0131c\\u0131 aray\\u00fcz\\u00fcnde a\\u00e7\\u0131l\\u0131r listeler ile formlarda sunabiliriz. Bu yaz\\u0131da se\\u00e7ilen kategoriye g\\u00f6re ba\\u011fl\\u0131 alt kategorileri sayfay\\u0131 yenilemeden dinamik olarak ajax ile backenden nas\\u0131l \\u00e7ekilir bunu anlataca\\u011f\\u0131m. Yaz\\u0131l\\u0131m dillerini tutaca\\u011f\\u0131m\\u0131z subject ad\\u0131nda bir \\u00fcst kategori ve bu kategoriye ba\\u011fl\\u0131 dillerin i\\u00e7eriklerini tutacak topic ad\\u0131nda alt kategorilerinin oldu\\u011fu bir veritaban\\u0131 yap\\u0131s\\u0131 var.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.etemkeskin.com\/index.php\/tr\/2021\/01\/14\/django-da-ajax-ile-dinamik-acilir-liste-nasil-yapilir-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.etemkeskin.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Django&#8217; da Ajax ile Dinamik A\\u00e7\\u0131l\\u0131r Liste Nas\\u0131l Yap\\u0131l\\u0131r?\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.etemkeskin.com\/#\/schema\/person\/dcbc30282861ce578b96a79ce8789629\",\"name\":\"etemkeskin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.etemkeskin.com\/#personlogo\",\"inLanguage\":\"tr\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6af0148b790691ed24ae245fb3dc773b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6af0148b790691ed24ae245fb3dc773b?s=96&d=mm&r=g\",\"caption\":\"etemkeskin\"},\"url\":\"https:\/\/www.etemkeskin.com\/index.php\/author\/etemkeskinyahoo-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/posts\/870"}],"collection":[{"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/comments?post=870"}],"version-history":[{"count":1,"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/posts\/870\/revisions"}],"predecessor-version":[{"id":871,"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/posts\/870\/revisions\/871"}],"wp:attachment":[{"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/media?parent=870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/categories?post=870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.etemkeskin.com\/index.php\/wp-json\/wp\/v2\/tags?post=870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}