در جنگو، ویوها (Views) و قالبها (Templates) اجزای اصلی برای پردازش و نمایش صفحات وب هستند. ویوها مسئول پردازش درخواستها (HTTP requests) و تولید پاسخها (HTTP responses) هستند، در حالی که قالبها به شما امکان میدهند که محتوای HTML را به صورت پویا و از روی دادههای موجود تولید کنید.
۱. ویوها (Views) در جنگو
ویوها در جنگو مسئول پردازش درخواستها و ارسال پاسخ به کاربر هستند. یک ویو معمولاً یک تابع یا کلاس است که درخواست ورودی را دریافت میکند، با دادهها یا مدلهای مرتبط تعامل میکند و پاسخ نهایی را باز میگرداند.
تعریف یک ویو ساده:
یک ویو ساده میتواند به صورت یک تابع تعریف شود. این تابع یک درخواست HTTP دریافت میکند و یک پاسخ HTTP ارسال میکند.
مثال:
from django.shortcuts import render
# ویو ساده که فقط یک پیام متنی به کاربر ارسال میکند
def my_view(request):
return HttpResponse("Hello, world!")
در این مثال:
- ویو my_view یک درخواست HTTP دریافت میکند.
- سپس، به جای بازگشت دادههای ثابت، یک پاسخ متنی ساده به کاربر ارسال میکند.
استفاده از قالبها در ویوها:
در جنگو معمولاً پاسخها به جای اینکه به صورت متنی ساده باشند، از قالبها برای تولید HTML استفاده میکنند. به این منظور از تابع render() استفاده میشود.
مثال:
context = {'name': 'Alice'}
return render(request, 'myapp/hello.html', context)
در اینجا:
- از تابع render برای رندر کردن یک فایل قالب به نام hello.html استفاده شده است.
- context یک دیکشنری است که دادهها را برای قالب ارسال میکند (در اینجا، نام کاربر را به قالب میدهد).
۲. قالبها (Templates) در جنگو
قالبها در جنگو برای جدا کردن منطق نمایش از منطق تجاری (business logic) استفاده میشوند. قالبها معمولاً شامل HTML و تگهای خاص جنگو برای رندر کردن دادهها هستند. این تگها به شما امکان میدهند که دادههای پویا را به صورت ساده در HTML قرار دهید.
ساختار قالب:
-
تعریف فایل قالب: فایلهای قالب معمولاً در پوشهای به نام templates در اپلیکیشن یا پروژه قرار دارند.
ساختار پوشهها به شکل زیر میتواند باشد:
myproject/
└── myapp/
└── templates/
└── myapp/
└── hello.html -
استفاده از دادهها در قالب: در قالبها میتوانید از تگهای خاص جنگو برای نمایش دادهها استفاده کنید.
<!DOCTYPE html>
<html>
<head>
<title>Hello Page</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
در این قالب:
- {{ name }} یک متغیر است که در ویو به قالب ارسال میشود. جنگو این متغیر را با مقداری که در context به قالب ارسال کردهاید، جایگزین میکند.
استفاده از تگهای قالب جنگو:
-
تگهای نمایش متغیرها:
- {{ variable_name }}: برای نمایش مقدار یک متغیر.
- مثال:
<h1>Hello, {{ user_name }}!</h1>
-
ساختارهای شرطی:
- {% if condition %} و {% endif %} برای ایجاد شرایط.
- مثال:
{% if user_logged_in %}
<p>Welcome back, {{ username }}!</p>
{% else %}
<p>Please log in.</p>
{% endif %}
-
حلقهها:
- {% for item in list %} و {% endfor %} برای تکرار بر روی لیستها.
- مثال:
<ul>
{% for book in books %}
<li>{{ book.title }}</li>
{% endfor %}
</ul>
۳. مسیرها (URLs) و ارتباط آنها با ویوها
برای اینکه ویوها به درخواستهای HTTP پاسخ دهند، باید مسیرهای URL را به ویوها متصل کنید. این کار از طریق فایل urls.py انجام میشود.
تعریف مسیرها:
در فایل urls.py، میتوانید مسیرهای مختلف را به ویوهای مختلف ارجاع دهید.
مثال:
from . import views
urlpatterns = [
path('hello/', views.my_view, name='hello'),
]
در این مثال:
- مسیر hello/ به ویو my_view ارجاع داده میشود.
- هنگامی که کاربر به آدرس http://127.0.0.1:8000/hello/ وارد میشود، ویو my_view فراخوانی خواهد شد.
۴. استفاده از قالبهای پایه (Base Templates)
در جنگو، معمولاً برای کاهش تکرار و بهبود نگهداری کد، از قالبهای پایه استفاده میشود. قالبهای پایه شامل ساختار عمومی صفحات مانند هدر، فوتر، و منو هستند و سایر قالبها میتوانند آنها را ارثبری کنند.
مثال از قالب پایه (base.html):
<html>
<head>
<title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
<header>
<h1>Welcome to My Website</h1>
</header>
<nav>
<!-- Navigation links -->
</nav>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>Footer content</p>
</footer>
</body>
</html>
استفاده از قالب پایه در سایر قالبها:
{% block content %}
<h2>This is a child page</h2>
<p>Content goes here...</p>
{% endblock %}
در اینجا:
- قالب child.html از قالب base.html ارثبری میکند.
- بخشهایی از قالب پایه که میخواهیم تغییر دهیم را در بلوکهای خاص مانند {% block content %} قرار میدهیم.
نتیجهگیری
- ویوها در جنگو مسئول پردازش درخواستها و ارسال پاسخها هستند. آنها میتوانند دادهها را از مدلها بگیرند، با آنها تعامل کنند و سپس دادهها را به قالبها ارسال کنند تا به کاربر نمایش داده شوند.
- قالبها مسئول نمایش محتوای HTML هستند و به شما این امکان را میدهند که دادهها را به صورت پویا در صفحات وب قرار دهید.
- با استفاده از ترکیب ویوها و قالبها، جنگو یک چارچوب بسیار قدرتمند و انعطافپذیر برای ساخت وبسایتهای دینامیک فراهم میکند.
