يحتوي Django على عدد كبير مما يسمى بدوال الاختصار التي تجعل التطوير باستخدام جانغو أسهل. هذه الاختصارات عبارة عن دوال مساعدة تغطي العديد من المستويات المختلفة للنموذج والعرض ونموذج القالب.
تعتبر دالة render()
إحدى هذه الدوال. و الغرض منها هو إرجاع HttpResponse
الذي تم ملء محتواه بنتيجة استدعاء render_to_string()
باستخدام الوسائط التي تم تمريرها.
لقد رأينا كيفية استخدام دالة render_to_string()
في درس تسجيل قوالب Django. اما في هذا الدرس سنرى كيفية الاستفادة من دالة render()
.
دالة render()
قبل أن نستخدم دالة render()
، دعونا نلقي نظرة على كود المصدر الخاص بها.
def render(request, template_name, context=None, content_type=None, status=None, using=None):
"""
Return a HttpResponse whose content is filled with the result of calling
django.template.loader.render_to_string() with the passed arguments.
"""
content = loader.render_to_string(template_name, context, request, using=using)
return HttpResponse(content, content_type, status)
تحتوي دالة render()
على وسيطتين إلزاميتين يجب عليك تمريرهما إليهما عند استدعاء الدالة. و هما : request واسم القالب. كما تتضمن المعلمات الاختيارية السياق ونوع المحتوى والحالة والاستخدام.
و من أجل تجريب دالة render()
سنقوم بإنشاء قالب بسيط لنعمل عليه، و يعتبر تكرار اسم التطبيق في مجلد القوالب من أفضل الممارسات لأنه إذا كان هناك العديد من التطبيقات في المشروع التي لها أسماء مشابهة، فلن يعرف Django أي القوالب التي يجب إستخدامها. وذلك لأن جانغو يدمج كافة مجلدات القوالب في مجلد قوالب واحد كبير أثناء وقت التشغيل.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>The Template Works!</h1>
</body>
</html>
استدعاء render() في دالة العرض
لقد رأينا عدة طرق لعرض قالب في Django و من بينها استخدام دالة render_to_string()
لتحويل قالب إلى سلسلة تحتوي على HTML الخاص بالقالب. ثم يتم إرسال هذه السلسلة مرة أخرى إلى المستخدم عن طريق HttpResponse. تتيح لنا وظيفة render()
إجراء هذه العملية المكونة من خطوتين وإكمال المهمة في خطوة واحدة. يتم إستخدام دالة render()
في ملف view.py
.
from django.shortcuts import redirect, render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
# dictionary data store
goals = {
'daily': 'Learn Something New',
'weekly': 'Take a day off',
'monthly': 'Complete a creative course'
}
def homepage(request):
goal_list = '<html><body><ul>'
for goal in goals.keys():
href = reverse('namedurl', args=[goal])
goal_list += f'<li><a href="{href}">{goal}</a></li>'
goal_list += '</ul></body></html>'
return HttpResponse(goal_list)
def goals_by_int_timeframe(request, timeframe):
timeframes = list(goals.keys())
redirect_to = timeframes[timeframe - 1]
named_redirect = reverse('namedurl', args=[redirect_to])
return HttpResponseRedirect(named_redirect)
def goals_by_timeframe(request, timeframe):
goal = goals[timeframe]
return render(request, 'goals/goal.html')
هذا كل شيئ، قم بتشغيل السيرفر المحلي لنرى النتيجة.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.