জ্যাঙ্গো - রেন্ডার (), রেন্ডার_ থেকে_উত্তেজক () এবং ডাইরেক্ট_ টো_টেম্প্লেট () এর মধ্যে পার্থক্য কী?


238

কী পার্থক্য মধ্যে একটি দৃশ্য (ভাষায় একটি পাইথন / জ্যাঙ্গো noob বুঝতে পারেন) render(), render_to_response()এবং direct_to_template()?

উদাহরণস্বরূপ নাথন বোরারের প্রাথমিক অ্যাপ্লিকেশন উদাহরণগুলি থেকে

def comment_edit(request, object_id, template_name='comments/edit.html'):
    comment = get_object_or_404(Comment, pk=object_id, user=request.user)
    # ...
    return render(request, template_name, {
        'form': form,
        'comment': comment,
    })

তবে আমিও দেখেছি

    return render_to_response(template_name, my_data_dictionary,
              context_instance=RequestContext(request))

এবং

    return direct_to_template(request, template_name, my_data_dictionary)

পার্থক্য কী, কোনও বিশেষ পরিস্থিতিতে কী ব্যবহার করবেন?

উত্তর:


185

https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#render

render(request, template[, dictionary][, context_instance][, content_type][, status][, current_app])

render()render_to_response1.3 এর মধ্যে একটি ব্র্যান্ড চমত্কার নতুন শর্টকাট যা স্বয়ংক্রিয়ভাবে ব্যবহার RequestContextকরবে যে আমি এখন থেকে অবশ্যই ব্যবহার করব।


2020 সম্পাদনা: এটি লক্ষ করা উচিত যে render_to_response()জাজানো 3.0 তে সরানো হয়েছিল

https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#render-to-response

render_to_response(template[, dictionary][, context_instance][, mimetype])¶

render_to_responseটিউটোরিয়াল এবং এর মতো ব্যবহৃত আপনার স্ট্যান্ডার্ড রেন্ডার ফাংশন। ব্যবহার করার জন্য RequestContextআপনাকে নির্দিষ্ট করতে হবেcontext_instance=RequestContext(request)


https://docs.djangoproject.com/en/1.8/ref/generic-views/#django-views-generic-simple-direct-to-template

direct_to_templateএকটি সাধারণ দৃষ্টিভঙ্গি যা আমি আমার দর্শনগুলিতে ব্যবহার করি (আমার ইউআরএলগুলির বিপরীতে) কারণ নতুন render()ফাংশনের মতো এটি স্বয়ংক্রিয়ভাবে ব্যবহার করে RequestContextএবং এর context_processorসমস্তগুলি।

কিন্তু direct_to_template এড়িয়ে চলা উচিত হিসাবে ফাংশন ভিত্তিক জেনেরিক মতামত অবচিত করছে। হয় ব্যবহার করুন renderবা প্রকৃত শ্রেণি, দেখুন https://docs.djangoproject.com/en/1.3/topics/generic-views-migration/

আমি খুশি যে আমি RequestContextদীর্ঘ, দীর্ঘ সময় টাইপ করিনি ।


1
কারেকশন। ডক্স অনুযায়ী render()1.3 থেকে উপলব্ধ।
অ্যাপলগ্রু

@ অ্যাপলগ্রু, দুর্দান্ত ধরা! "সম্প্রদায়" সুনির্দিষ্ট শাখাগুলি নির্দেশ করার জন্য আমার পোস্টটি পরিবর্তন করেছে এবং তারা 1.4
ইউজি 'টোমিটা' টোমিতা

6
মনে রাখবেন: ফাংশন ভিত্তিক জেনেরিক দৃষ্টিভঙ্গি হ'ল, ফাংশন ভিত্তিক দর্শনগুলি নয় । জ্যাঙ্গিক ভিউগুলি যে জ্যাঙ্গোর সাথে পাঠানো হয়েছে সেগুলি এখন শ্রেণিবদ্ধ দর্শন (টেমপ্লেটভিউ) ব্যবহার করে প্রয়োগ করা হয়, তারা ফাংশন (ডাইরেক্ট_ টো_প্লেট ইত্যাদি) হিসাবে প্রয়োগ করা হত। ফাংশন হিসাবে প্রয়োগ করা মতামত, আমার ব্যক্তিগত পছন্দ, এখনও সমর্থিত এবং এটি পরিবর্তন হবে না।
নিক জালুটস্কি

40

জ্যাঙ্গো নুব (যেমন আমি) এর জন্য ইউরি, ফ্যাবিও এবং ফ্রস্টস উত্তরগুলি রিফ্র্যাসিং - প্রায় অবশ্যই সরলীকরণ, তবে একটি ভাল সূচনা পয়েন্ট?

  • render_to_response()এটি "আসল", তবে আপনাকে context_instance=RequestContext(request)প্রায় সমস্ত সময় পিআইটিএ লাগানো দরকার ।

  • direct_to_template()ভিউ.পি-তে সংজ্ঞায়িত ভিউ ছাড়াই কেবল urls.py এ ব্যবহার করার জন্য ডিজাইন করা হয়েছে তবে এটি অনুরোধকন্টেক্সট টাইপ না করে এড়াতে ভিউ.পি ব্যবহার করা যেতে পারে

  • render()এটি render_to_response()স্বয়ংক্রিয়ভাবে সরবরাহ করার জন্য একটি শর্টকাট context_instance=Request.... এটি জ্যাঙ্গো বিকাশ সংস্করণে উপলব্ধ (২.২.১) তবে অনেকে তাদের নিজস্ব শর্টকাট তৈরি করেছেন যেমন এটি , এটি একটি বা প্রাথমিকভাবে আমাকে ছুড়ে ফেলেছে, নাথানস বেসিক.টুলস। shortcuts.py


প্রথম লিঙ্কটি ( আমদানি-অসাধারণ.com/… ) 404 দিচ্ছে
লুসিও

হ্যাঁ, প্রায় 4 বছরের পুরানো লিঙ্কগুলিতে এটি ঘটতে পারে!
রায়ান

24

রেন্ডার হয়

def render(request, *args, **kwargs):
    """ Simple wrapper for render_to_response. """
    kwargs['context_instance'] = RequestContext(request)
    return render_to_response(*args, **kwargs)

সুতরাং render_to_responseএটি আপনার প্রসঙ্গে টেমপ্লেটটিকে প্রি-প্রসেসরগুলির কাজ করে তবে এটির মধ্যে আসলে কোনও পার্থক্য নেই ।

সরাসরি টেমপ্লেট একটি জেনেরিক ভিউ

এখানে এটি ব্যবহার করার সত্যিই কোনও ধারণা নেই কারণ render_to_responseভিউ ফাংশনের আকারে ওভারহেড রয়েছে ।


12

জ্যাঙ্গো ডক্স থেকে :

রেন্ডার () রেন্ডার_ টো-রিসপন্স () কে একটি প্রসঙ্গ_ইনস্ট্যান্স যুক্তি দিয়ে অনুরোধ করে যা অনুরোধকন্টেক্সটেক্সকে ব্যবহার করতে বাধ্য করে।

direct_to_templateঅন্যরকম। এটি একটি জেনেরিক ভিউ যা এইচটিএমএলকে ভিউ.পিয়ের প্রয়োজন ছাড়াই রেন্ডার করতে একটি ডেটা ডিকশনারি ব্যবহার করে, আপনি এটি ইউআরএল.পি.তে ব্যবহার করেন। এখানে ডক্স


6

কেবল একটি নোট আমি উপরের উত্তরগুলিতে খুঁজে পাইনি। এই কোডে:

context_instance = RequestContext(request)
return render_to_response(template_name, user_context, context_instance)

তৃতীয় প্যারামিটারটি context_instanceআসলে কী করে? বিয়িং RequestContext এটা কিছু মৌলিক প্রসঙ্গ যা পরে যোগ করা হয় সেট আপ user_context। সুতরাং টেমপ্লেটটি এই বর্ধিত প্রসঙ্গটি পায়। কি ভেরিয়েবল যুক্ত করা হয় সেটিংস.পাই দ্বারা দেওয়া হয় TEMPLATE_CONTEXT_PROCESSORS। উদাহরণস্বরূপ django.contrib.auth.context_processors.auth পরিবর্তনশীল userএবং পরিবর্তনশীল যুক্ত করে permযা টেমপ্লেটে অ্যাক্সেসযোগ্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.