Loyihaga stillar qo‘shish


ULASHISH

Loyiha — My Tennis Club

Agar butun Django darsligidagi qadamlarni bajargan bo‘lsangiz, kompyuteringizda 5 ta a’zoga ega my_tennis_club loyihasi bo‘ladi:

Biz ushbu loyihaga stil fayli (stylesheet) qo‘shib, uni mystaticfiles papkasiga joylashtirmoqchimiz:

my_tennis_club     manage.py     my_tennis_club/     members/     mystaticfiles/         mystyles.css

CSS faylining nomini o‘zingiz tanlaysiz, biz bu loyihada uni mystyles.css deb nomlaymiz.

CSS faylni oching va unga quyidagini qo‘shing:

my_tennis_club/mystaticfiles/mystyles.css:

body {
  background-color: violet;
}

Master shablonni o‘zgartirish

Endi sizda CSS fayl bor, keyingi qadam — bu faylni master shablonga ulash:

Master shablon faylini oching va quyidagilarni qo‘shing:

my_tennis_club/members/templates/master.html:

{% load static %}
<!DOCTYPE html>
<html>
<head>
  <title>{% block title %}{% endblock %}</title>
  <link rel="stylesheet" href="{% static 'mystyles.css' %}">  
</head>
<body>

{% block content %}
{% endblock %}

</body>
</html>


Sozlamalarni tekshirish

settings.py faylingizda ildiz katalogdagi mystaticfiles papkasiga havola qiluvchi STATICFILES_DIRS ro‘yxati borligiga va STATICFILES_ROOT papkasi ko‘rsatilganiga ishonch hosil qiling:

my_tennis_club/my_tennis_club/settings.py:

.
.
STATIC_ROOT = BASE_DIR / 'productionfiles'

STATIC_URL = 'static/'

#Add this in your settings.py file:
STATICFILES_DIRS = [
    BASE_DIR / 'mystaticfiles'
]
.
.

Statik fayllarni yig‘ish

Statik faylga har safar o‘zgartirish kiritganingizda, o‘zgarishlar kuchga kirishi uchun collectstatic buyrug‘ini ishga tushirishingiz kerak:

python manage.py collectstatic

Agar bu buyruqni loyihada avval ham bajargan bo‘lsangiz, Django sizga savol beradi:

You have requested to collect static files at the destination location as specified in your settings:     C:\Users\Your Name\myworld\my_tennis_club\productionfiles This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel:

"yes" deb yozing. Bu statik fayllarga kiritilgan barcha o‘zgarishlarni yangilaydi va quyidagi natijani beradi:

1 static file copied to 'C:\Users\Your Name\minverden\my_tennis_club\productionfiles', 129 unmodified.

Endi loyihani ishga tushirsangiz:

python manage.py runserver

U quyidagicha ko‘rinadi:

Agar barcha qadamlarni o‘z kompyuteringizda bajargan bo‘lsangiz, natijani o‘z brauzeringizda ko‘rishingiz mumkin:

Brauzer oynasidagi manzil satriga 127.0.0.1:8000/members/ deb yozing.


Dizaynga jilo beramiz!

Yuqoridagi misolda loyihangizga stil faylini qanday ulashni ko‘rsatdik.

Natijada binafsha rangli veb-sahifa hosil bo‘ldi, ammo CSS fon rangini o‘zgartirishdan ko‘ra ko‘proq narsaga qodir.

Biz stillar bilan ko‘proq ishlab, quyidagi kabi natijaga erishmoqchimiz:

Avval mystyles.css faylining mazmunini quyidagi bilan almashtiring:

my_tennis_club/mystaticfiles/mystyles.css:

@import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600&display=swap');
body {
  margin:0;
  font: 600 18px 'Source Sans Pro', sans-serif;
  letter-spacing: 0.64px;
  color: #585d74;
}
.topnav {
  background-color:#375BDC;
  color:#ffffff;
  padding:10px;
}
.topnav a:link, .topnav a:visited {
  text-decoration: none;
  color: #ffffff; 
}
.topnav a:hover, .topnav a:active {
  text-decoration: underline;
}
.mycard {
  background-color: #f1f1f1;
  background-image: linear-gradient(to bottom, #375BDC, #4D70EF); 
  background-size: 100% 120px;
  background-repeat: no-repeat;
  margin: 40px auto;
  width: 350px;
  border-radius: 5px;
  box-shadow: 0 5px 7px -1px rgba(51, 51, 51, 0.23); 
  padding: 20px;
}
.mycard h1 {
  text-align: center;
  color:#ffffff;
  margin:20px 0 60px 0;
}
ul {
  list-style-type: none;
  padding: 0;
  margin: 0;
}
li {
  background-color: #ffffff;
  background-image: linear-gradient(to right, #375BDC, #4D70EF); 
  background-size: 50px 60px;
  background-repeat: no-repeat;
  cursor: pointer;
  transition: transform .25s;
  border-radius: 5px;
  box-shadow: 0 5px 7px -1px rgba(51, 51, 51, 0.23);
  padding: 15px;
  padding-left: 70px;
  margin-top: 5px;
}
li:hover {
  transform: scale(1.1);
}
a:link, a:visited {
  color: #375BDC; 
}
.main, .main h1 {
  text-align:center;
  color:#375BDC;
}

Shablonlarni o‘zgartirish

Shuningdek, shablonlarga ham ba’zi o‘zgartirishlar kiritishingiz kerak:

Asosiy shablon (master)

Barcha sahifalarda bir xil yuqori navigatsiya bo‘lishini istaymiz, shuning uchun yuqori navigatsiyani master.html fayliga joylashtiramiz:

my_tennis_club/members/templates/master.html:

{% load static %}
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="{% static 'mystyles.css' %}">
  <title>{% block title %}{% endblock %}</title>
</head>
<body>

<div class="topnav">
  <a href="/">HOME</a> |
  <a href="/members">MEMBERS</a>
</div>

{% block content %}
{% endblock %}

</body>
</html>

A’zolar

all_members.html faylida HTML kodga ba’zi o‘zgartirishlar kiritmoqchimiz.

A’zolar div elementiga joylashtiriladi, havolalar esa onclick atributiga ega ro‘yxat elementlariga aylanadi.

Navigatsiyani ham olib tashlamoqchimiz, chunki u endi master shablonning bir qismi.

my_tennis_club/members/templates/all_members.html:

{% extends "master.html" %}

{% block title %}
  My Tennis Club - List of all members
{% endblock %}

{% block content %}
  <div class="mycard">
    <h1>Members</h1>
    <ul>
      {% for x in mymembers %}
        <li onclick="window.location = 'details/{{ x.id }}'">{{ x.firstname }} {{ x.lastname }}</li>
      {% endfor %}
    </ul>
  </div>
{% endblock %}

Tafsilotlar

details.html faylida a’zo haqidagi ma’lumotlarni div elementiga joylashtiramiz va a’zolar ro‘yxatiga qaytish havolasini olib tashlaymiz, chunki u endi master shablondagi navigatsiyaning bir qismi.

my_tennis_club/members/templates/details.html:

{% extends "master.html" %}

{% block title %}
  Details about {{ mymember.firstname }} {{ mymember.lastname }}
{% endblock %}

{% block content %}
  <div class="mycard">
    <h1>{{ mymember.firstname }} {{ mymember.lastname }}</h1>
    <p>Phone {{ mymember.phone }}</p>
    <p>Member since: {{ mymember.joined_date }}</p>
  </div>
{% endblock %}  

Bosh sahifa

main.html shablonida HTML kodning bir qismini div elementiga joylashtiramiz:

my_tennis_club/members/templates/main.html:

{% extends "master.html" %}

{% block title %}
  My Tennis Club
{% endblock %}

{% block content %}
  <div class="main">
    <h1>My Tennis Club</h1>

    <h3>Members</h3>
  
    <p>Check out all our <a href="members/">members</a></p>
  </div>
{% endblock %}

Statik fayllarni yig‘ish

Statik mystyles.css fayliga o‘zgartirishlar kiritganimiz sababli, ular kuchga kirishi uchun collectstatic buyrug‘ini ishga tushirishimiz kerak:

python manage.py collectstatic

Endi loyihani ishga tushirsangiz:

python manage.py runserver

Natija qanday ko‘rinishi kerakligini ko‘rishingiz mumkin:

Yoki, agar barcha qadamlarni o‘z kompyuteringizda bajargan bo‘lsangiz, natijani o‘z brauzeringizda ko‘rishingiz mumkin:

Brauzer oynasidagi manzil satriga 127.0.0.1:8000/members/ deb yozing.



W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!