Django-compressor: рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд╛рдж svg рдЫрд╡рд┐ url рдореЗрдВ xml рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдордИ 2018  ┬╖  2рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: django-compressor/django-compressor

рдореИрдВ django_compressor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк.min.js рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ

XML рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдиреЗрдмрд░ рдкрддрди рдЖрдЗрдХрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдореИрдВ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк 4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд╕рд╛рде рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛

рдореИрдВ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдирд┐рд░реАрдХреНрд╖рдг рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрдВрддрд░ рджреЗрдЦрд╛

рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ (рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛)

.navbar-dark .navbar-toggler-icon {
    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")
}

рдпрд╣ XML рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ (рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд╛рдж)

.navbar-dark .navbar-toggler-icon {
    background-image: url("data:image/svg+xml;charset=utf8,%3CsvgviewBox='003030'xmlns='http://www.w3.org/2000/svg'%3E%3Cpathstroke='rgba(255,255,255,0.5)'stroke-width='2'stroke-linecap='round'stroke-miterlimit='10'd='M47h22M415h22M423h22'/%3E%3C/svg%3E")
}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ # 828 рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд╡рдЬреВрдж рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ

рдореИрдВ Django 2.0, рдкрд╛рдпрдерди 3.6, django-рдХрдВрдкреНрд░реЗрд╕рд░ 2.2, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк 4.1.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рд╕рдорд╕реНрдпрд╛ CSSMinFilter

рд╕рднреА 2 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ # 828 рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд╡рдЬреВрдж рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ

рдореИрдВ Django 2.0, рдкрд╛рдпрдерди 3.6, django-рдХрдВрдкреНрд░реЗрд╕рд░ 2.2, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк 4.1.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рд╕рдорд╕реНрдпрд╛ CSSMinFilter

Csscompressor рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╕реЗ рдЙрдзрд╛рд░ rcssmin рдХреЛ рд░реИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рд╛ (рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ CSSMinFilter рдХреА рдЬрдЧрд╣ред рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдбреЙрдЯреЗрдб рдкрде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рдеCOMPRESS_FILTERS рдФрд░ callback рдкрде рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ)ред рдпрд╣ rcssmin рдХреЛ рд╕реМрдВрдкрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ URL рдореЗрдВ "% 20" рдХреЗ рд╕рд╛рде рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ рдЬреЛ рдХрд┐ rssmin рдХреЛ URL рдХреЛ рдореЗрдиреНрдпреВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

def compress(css, **kwargs):
    capture_svg = re.compile(r'url\("(data:image/svg.*?svg%3[Ee])\"\)')
    data_urls = re.findall(capture_svg, css)
    for data_url in data_urls:
        css = css.replace(data_url, data_url.replace(' ', '%20'))
    css = cssmin(css, **kwargs)
    return css


class CSSMinFilter(CallbackOutputFilter):
    callback = 'myapp.core.utils.compress'

рдпрд╣ рд╕рдорд╕реНрдпрд╛ rcssmin рдХреЛ рднреА

FYI рдХрд░реЗрдВ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ # 878 рдХреА рдирдХрд▓ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dasloss picture dasloss  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amosjyng picture amosjyng  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jgirdner picture jgirdner  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gh640 picture gh640  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ