69 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Using templates with your web server | |||
|  | localeTitle: باستخدام القوالب مع خادم الويب الخاص بك | |||
|  | ---
عندما يكون لديك خادم ويب ، قد ترغب في إدراج البيانات في ردودك. دعونا نرى بعض التعليمات البرمجية: | |||
|  | 
 | |||
|  |  `package main  | |||
|  |   | |||
|  |  import (  | |||
|  |   "net/http"  | |||
|  |   "html/template"  | |||
|  |  )  | |||
|  |   | |||
|  |  type PAGE struct {  | |||
|  |   NAME string  | |||
|  |  }  | |||
|  |   | |||
|  |  var page PAGE  | |||
|  |   | |||
|  |  func main() {  | |||
|  |   page.NAME = "Mark"  | |||
|  |   http.HandleFunc("/", servePage)  | |||
|  |   http.ListenAndServe(":8080", nil)  | |||
|  |  }  | |||
|  |   | |||
|  |  func servePage(writer http.ResponseWriter, reqest *http.Request) {  | |||
|  |   template := template.New("sayHello")  | |||
|  |   template, _ = template.Parse("Hello {{.NAME}}!")  | |||
|  |   template.Execute(writer, page)  | |||
|  |  }  | |||
|  | `  | |||
|  | 
 | |||
|  | الآن أطلق هذا البرنامج وتصفح متصفحك من أجل: | |||
|  | 
 | |||
|  |  `http://localhost:8080/  | |||
|  | `  | |||
|  | 
 | |||
|  | سيكون الرد: | |||
|  | 
 | |||
|  |  `Hello Mark!  | |||
|  | `  | |||
|  | 
 | |||
|  | ولكن كيف يعمل هذا وما يفعله الرمز؟ حسنا ، أولا وقبل كل شيء نستورد حزمة `net/http` حتى نتمكن من تشغيل خادم الويب. ثم نستورد حزمة `html/template` . يتيح هذا ميزة تسمى templating؛ وهذا هو المكان الذي تدور حوله هذه المقالة. | |||
|  | 
 | |||
|  | نقوم أيضًا بإنشاء نوع يسمى `PAGE` ، والذي يحتوي على حقل واحد يسمى `NAME` `string` . كما نقوم أيضًا بإنشاء متغير عالمي يسمى `page` من النوع `PAGE` ، البنية التي أنشأناها للتو. في الوظيفة `main` نمنح حقل `NAME` `page` قيمة `Mark` - اسمي ، ولكن لا تتردد في استخدام اسمك! | |||
|  | 
 | |||
|  | وظيفة `servePage` صعبة بعض الشيء في البداية. لنأخذها على حدة: | |||
|  | 
 | |||
|  |  `func servePage(writer http.ResponseWriter, reqest *http.Request) {  | |||
|  |   | |||
|  |   // 1. Creating a template  | |||
|  |   template := template.New("sayHello")  | |||
|  |   | |||
|  |   // 2. Filling the template  | |||
|  |   template, _ = template.Parse("Hello {{.NAME}}!")  | |||
|  |   | |||
|  |   // 3. Executing the template  | |||
|  |   template.Execute(writer, page)  | |||
|  |  }  | |||
|  | `  | |||
|  | 
 | |||
|  | ماذا نفعل هنا؟ دعونا نرى خطوة بخطوة: | |||
|  | 
 | |||
|  | 1.  نحن نخلق _قالب_ . تحتاج إلى إدخال اسم ، ولكن لا يهم ما الاسم الذي تختاره حقًا. هنا اخترت `sayHello` . | |||
|  | 2.  ثم نقوم بملء القالب ببعض النص. يرجى الإحاطة علما بـ `{{.NAME}}` . | |||
|  | 3.  وأخيرًا ، نقوم _بتنفيذ_ القالب. هذا يعني أنه تم ملء القالب وإرساله إلى العميل. | |||
|  | 
 | |||
|  | لكن كيف نذهب من `{{.NAME}}` إلى `Mark` ؟ حسنًا ، تذكر أننا استخدمنا متغير `page` كمعلمة لأسلوب `Execute` ؟ تبحث هذه الطريقة في البيانات الموجودة في القالب وترى `{{.NAME}}` . يشير `.NAME` إلى أنه يجب أن يبحث عن حقل يسمى `NAME` داخل المتغير الذي تم تحديده كمعلمة عند استدعاء `Execute` . في هذه الحالة ، يجد هذا الحقل ويحيط علما بأن القيمة هي `Mark` . يخبر `{{` و `}}` `Execute` أنه يجب استبدال `{{.NAME}}` بالقيمة التي وجدها. وبالتالي فإن النتيجة النهائية سوف تصبح `Hello Mark!` . | |||
|  | 
 | |||
|  | يمكن أن يكون لديك حقول متعددة `{{.XXX}}` . هذه طريقة سهلة للغاية يمكنك إدراج البيانات في الردود ، وتعرف الآن كيفية عمل قالب في Go! |