الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية عمل تعدد الصفحات بلغ البايثون

بدأه sharkawey في 11 مايو 2014 · 9 رد · 671 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 

انا الان صممت قالب ب ال html و ال css لكن اريد ان اعرف مثلا اذا حبيت ان اضيف صفحة جديدة اتوماتيكيا مثل زر اضافة موضوع في المنتديات مثلا كيف يمكنني عمل ذلك وشكرا ؟

#2

هل تستعمل اطار عمل معين في مشروعك ؟

#3

مش فاهم قصدك ب اطار عمل :)

#4

يعني Framework مثل جانغو

#5

انا بستخدم django :)

#6

ok

للتنبيه، خاصية تعدد الصفحات pagination يقصد بها تقسيم الكائنات المراد اظهارها على عدد معين من الصفحات
الكائنات objects يمكن ان تكون مواضيع ، تعليقات ، صور او اي شيء اخر
 
مثلا : عندك 10 مواضيع مخزنة في قاعدة  البيانات وتريد اظهارها في موقعك ، طبعا سيكون من غير اللائق ان تضعها كلها في صفحة واحدة ، باستعمال خاصية تعدد الصفحات يمكنك مثلا تحديد عدد المواضيع في كل صفحة ومنه يكون عدد الصفحات الناتجة هو 4 . 3/10 = 3*3 + 1
 
اذا فهمت الامر يمكن اشرح لك كيفية عمل ذلك بواسطة جانغو
#7

فهمت ياريت شرح وكمان ياريت معلومات عن كيفية عمل ايضا زر انشاء موضوع جديد مثلا ؟ 

#8
كيفية عمل موضوع جديد  هو موضوع اخر له علاقة بالـ Forms و الـ models

اعطني قليلا من الوقت وستجد الشرح في المساء ان شاء الله لاني مستعجل حاليا

#9

شكرا لك خد وقتك اخي :)

#10
عذرا على التاخير 
للاجابة على سؤالك يجب انشاء بعض الامور اولا.
 
سافترض انك على عمل بكيفية انشاء مشروع جديد بواسطة جانغو:
لذا انشئ مشروع اسمه dj_pagination مثلا كذلك تطبيق اسمه app
 
اولا لنفترض انك تريد عمل خاصية تعدد الصفحات لمقالات تريد اظهارها في موقعك.
لذا يجب عليك انشاء موديل تحدد فيه خصائص المقالة الواحدة 
اذا في ملف models.py سنقوم بانشاء المودل التالي
 
class Article(models.Model):
	title = models.CharField(max_length = 200)
	content = models.CharField(max_length = 200)
ثم سنقوم بعد ان تقوم بانشاء بعض المقالات وتحفضها في قاعدة البيانات
تقوم بجلب المقالات الاخيرة في الـ view الخاصة بها :
اذن في ملف الـ تكتب الكود التالي:
 
from app.models import Article
from django.shortcuts import render_to_response, RequestContext


def articles(request):
	articles = Article.objects.all()
	return render_to_response('articles.html', locals(), context_instance = RequestContext(request))

 

ما قمنا بعمله حتى هذه النقطة هو استدعاء جميع المقالات واظهارها دفعة واحدة في ملف articles.html

 

لكن نريد ان نظهر للمستخدم محتوى اكثر تنظيما ، لذا سنقوم باظهار كل 3 مقالات في صفحة مستقلة.
( لنفترض اننا انشانا 10 مقالات مسبقا )
جانغو يتيح عمل ذلك اوتوماتيكيا لربح الوقت وذلك كما يلي:
 
سنعدل الكود الذي كتبناه في الــ view السابقة :
 
from app.models import Article
from django.shortcuts import render_to_response, RequestContext
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger


def articles(request):

	articles_list = Article.objects.all()
	paginator = Paginator(articles_list, 3) # Show 3 articles per page

	page = request.GET.get('page')

	try:
        articles = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        articles = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        articles = paginator.page(paginator.num_pages)


	return render_to_response('articles.html', locals(), context_instance = RequestContext(request))

 

والان لم يبقى الا كتابة الكود الاخير لاظهار النتائج للمستخدم 
في ملف articles.html قم بكتابة الكود التالي:
 
{% for article in articles %}
    {# Each "article" is an article model object. #}
    {{ article.title|upper }}<br />
    <hr/>  
    {{ article.content }}
    ...
{% endfor %}

<div class="pagination">
    <span class="step-links">
        {% if articles.has_previous %}
            <a href="?page={{ articles.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ articles.number }} of {{ articles.paginator.num_pages }}.
        </span>

        {% if articles.has_next %}
            <a href="?page={{ articles.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>

وفي الاخير انصحك بالتعمق اكثر في الدروس الاصلية  حتى تكسب خبرة اكثر

بالتوفيق

مواضيع مشابهة