Django P1으로 구축된 리테일 웹사이트 (2020-02-04)

19402 단어 djangodailynotes

장고:




템플릿 내장!!!



매우 유용함template shortcuts, tags and many more...

클래스 기반 보기: 일반 보기



학습 소스:
codingforentrepreneurs
generic views official documentation

폴더를 반복하려면



StackO: iterate through a static image folder in django :

This isn't something Django has built in. But Django is just Python, and you can use normal Python file functions to get your list in the view:

files = os.listdir(os.path.join(settings.STATIC_ROOT, "styles/jamia"))

쿼리셋에서 필터링



무엇을 찾아야 하는지 알고 있을 때:category_handbags = Category.objects.filter(name='Handbags')추가 읽기: Database Functions

* 필터()



By using filter(), we can retrieve a QuerySet of just those books that were published within the last 90 days period, like so:

from datetime import datetime, timedelta 
Book.objects.filter(date_published__gte=datetime.now() - timedelta(days=90)).count()
# __isnull
Book.objects.filter(author__isnull=True).count()
# __exact
Book.objects.filter(title__exact='').count()

* 제외()



if we use the exact same date_published example above but swap out filter() for exclude(), we’d expect the resulting book count to be the inverse: from 3 of 20 to now 17 of 20:

from datetime import datetime, timedelta
Book.objects.exclude(date_published__gte=datetime.now() - timedelta(days=90)).count()
# combining filters
Book.objects.exclude(author__isnull=True).exclude(title__exact='').count()

category.count() 대 len(카테고리)


len() 메모리의 모든 데이터를 로드한 다음 계산을 수행합니다.count()는 일반적으로 데이터가 미리 로드되지 않은 경우 더 빠릅니다.categories.first().count() 와 같은 쿼리 세트 관리자가 AttributeError 프롬프트를 표시하지 않도록 주의하십시오. 그러나 categories.first().subcategory_set.count()는 하위 범주의 수를 정확하게 알려주며 len(categories.first().subcategory_set.all())와 동일합니다. 보시다시피 모든 하위 범주를 읽어 길이를 계산합니다.

Django - 이미지:



이미지 필드



모델에 ImageField를 추가하고 데이터베이스의 이미지를 웹에 로드하려면:
참조: William Vincent
참조: GeeksforGeeks

잘못된 방향으로 업로드된 이미지:



휴대폰으로 찍은 사진에는 때때로 이 문제가 있는데, Giovanni의 post이 문제를 해결했습니다.

from django.db.models.signals import post_save
from django.dispatch import receiver
from PIL import Image, ExifTags
from django.db import models
import os

class Item(models.Model):
    name = ...

class ItemImage(models.Model):
    item = models.ForeignKey(Item)
    image = models.ImageField(upload_to='itemimages', null=True, blank=True)

# solves the problem that uploaded images are in wrong orientation
def rotate_image(filepath):
    try:
        image = Image.open(filepath)
        for orientation in ExifTags.TAGS.keys():
            if ExifTags.TAGS[orientation] == 'Orientation':
                break
        exif = dict(image._getexif().items())

        if exif[orientation] == 3:
            image = image.rotate(180, expand=True)
        elif exif[orientation] == 6:
            image = image.rotate(270, expand=True)
        elif exif[orientation] == 8:
            image = image.rotate(90, expand=True)
        image.save(filepath)
        image.close()
    except (AttributeError, KeyError, IndexError):
        # cases: image don't have getexif
        pass


@receiver(post_save, sender=ItemImage, dispatch_uid="update_image_item")
def update_image(sender, instance, **kwargs):
  if instance.image:
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    fullpath = BASE_DIR + instanc.image.url
    rotate_image(fullpath)



추가 읽기: FIX UPLOADED IMAGES IN PYTHON WEBAPPS

이미지 파일의 이미지 파일은 삭제되지만 파일은 MEDIA 폴더에 남아 있습니다.



Cleanup Files (and Images) On Model Delete in Django

참조: 온라인 소매 웹사이트



  • asos : 항목 표시 스타일, 분류 필터링, 가장 반응이 빠른 항목에서 가장 많이 참조됨

  • LOUIS VUITTON : 문구는 가장 우아하고 스타일은 미니멀하게

  • BOTTEGA VENETA : 랩탑에서 충분히 반응하지 않음

  • ACCESSORIZE LONDON : 랩탑에서 충분히 반응하지 않음

  • KUPIVIP : 저렴해 보인다

  • 장고 부트스트랩4




    컨테이너, 행 및 열



    컨테이너 및 그리드examplescol-sm-12 : 페이지 너비가 '작은' 경우 12열을 차지합니다.col-md-6 : 페이지 너비가 '중간'인 경우 6열을 차지합니다.col-lg-4 : 페이지 너비가 '큰' 경우 4열을 차지합니다.col-4 : 다른 규칙이 적용되지 않는 한 항상 4열을 차지합니다.
    col-md-auto: 페이지 너비가 '중간'인 경우 남아 있는 모든 열을 차지합니다.

    기본 그리드 설정: docs/4.4/layout/grid




    $grid-columns:      12;
    $grid-gutter-width: 30px;
    
    $grid-breakpoints: (
      xs: 0,      // Extra small screen / phone
      sm: 576px,  // Small screen / phone
      md: 768px,  // Medium screen / tablet
      lg: 992px,  // Large screen / desktop
      xl: 1200px  // Extra large screen / wide desktop
    );
    
    $container-max-widths: (
      sm: 540px,
      md: 720px,
      lg: 960px,
      xl: 1140px
    );
    


    간단히 파이썬:




    사전을 반복하려면:



    dict.keys() 메서드 및 dict.items() 메서드




    # using dict.keys() method
    D1 = {1:'a', 2:'b', 3:'c'} 
    for key in D1.keys():
        print(k, D1[k])
    # 1 a
    # 2 b
    # 3 c
    
    # using dict.items() method
    for key, value in D1.items()
        print(key, value)
    # same result
    

    좋은 웹페이지 즐겨찾기