commit
83e07bfd96
32 changed files with 1230 additions and 555 deletions
@ -0,0 +1,24 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-08-23 16:12 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('projects', '0013_auto_20160819_1735'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterModelOptions( |
||||
name='project', |
||||
options={'ordering': ('-created',), 'verbose_name': 'Проект', 'verbose_name_plural': 'Проекты'}, |
||||
), |
||||
migrations.AddField( |
||||
model_name='answer', |
||||
name='rejected', |
||||
field=models.BooleanField(default=False), |
||||
), |
||||
] |
||||
@ -0,0 +1,29 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-08-24 12:38 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.utils.timezone |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('projects', '0014_auto_20160823_1912'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterModelOptions( |
||||
name='portfolio', |
||||
options={'ordering': ['-created'], 'verbose_name': 'Портфолио', 'verbose_name_plural': 'Портфолио'}, |
||||
), |
||||
migrations.RemoveField( |
||||
model_name='project', |
||||
name='rejected_answers_count', |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='created', |
||||
field=models.DateTimeField(default=django.utils.timezone.now), |
||||
), |
||||
] |
||||
@ -0,0 +1,151 @@ |
||||
{% extends 'partials/base.html' %} |
||||
{% load staticfiles %} |
||||
{% load thumbnail %} |
||||
{% block content %} |
||||
{% include 'partials/header.html' %} |
||||
<div class="container mainScore"> |
||||
<div class="row"> |
||||
<div class="col-lg-12 allProjects"> |
||||
<p class="titleScore">{{ object }}</p> |
||||
|
||||
{% if object.get_prev %} |
||||
<div class="all all1"> |
||||
<p><a href="{% url 'projects:contractor-portfolio-detail' object.get_prev.pk %}"> предыдущий</a></p> |
||||
</div> |
||||
{% endif %} |
||||
|
||||
{% if object.get_next %} |
||||
<div class="all all2"> |
||||
<p><a href="{% url 'projects:contractor-portfolio-detail' object.get_next.pk %}">следующий</a></p> |
||||
</div> |
||||
{% endif %} |
||||
</div> |
||||
{# <div class="btnReadyBlock disTab">#} |
||||
{# <div class="triangle1"></div>#} |
||||
{# <div class="col-lg-3">#} |
||||
{# <p class="cenaReady">{{ object.budget }} <i class="fa fa-rub"></i></p>#} |
||||
{# </div>#} |
||||
{# {% if request.user.is_authenticated %}#} |
||||
{# <div class="col-lg-3">#} |
||||
{# <a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR1">#} |
||||
{# купить#} |
||||
{# </a>#} |
||||
{# </div>#} |
||||
{##} |
||||
{# <div class="col-lg-3">#} |
||||
{# <a href="{% url 'chat:chat-user' %}?user_id={{ object.contractor.pk }}" class="linkReady LR2">#} |
||||
{# Написать сообщение#} |
||||
{# </a>#} |
||||
{# </div>#} |
||||
{# {% endif %}#} |
||||
{# <div class="col-lg-3">#} |
||||
{# <a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR3">#} |
||||
{# посмотреть контакты#} |
||||
{# </a>#} |
||||
{# </div>#} |
||||
{# </div>#} |
||||
|
||||
|
||||
<div class="desReadyBlock"> |
||||
{% if object.text %} |
||||
<div class="col-lg-10 col-lg-offset-1"> |
||||
<p class="titleReady">Описание:</p> |
||||
</div> |
||||
<div class="col-lg-10 col-lg-offset-1"> |
||||
<p class="textReady"> |
||||
{{ object.text }} |
||||
</p> |
||||
</div> |
||||
{% endif %} |
||||
<div class="col-lg-12 sliderReady"> |
||||
<div class="arroww prev3"></div> |
||||
<div class="arroww next3"></div> |
||||
<div class="swiper-container gallery-top"> |
||||
<div class="swiper-wrapper"> |
||||
<div class="swiper-slide" style="background-image:url('{% static object.get_cover.url %}')"></div> |
||||
{% for photo in object.photos.all %} |
||||
<div class="swiper-slide" style="background-image:url('{% static photo.img.url %}')"></div> |
||||
{% endfor %} |
||||
</div> |
||||
</div> |
||||
<div class="swiper-container gallery-thumbs"> |
||||
<div class="swiper-wrapper"> |
||||
<div class="swiper-slide is-selected" |
||||
style="background-image:url('{% static object.get_cover.url %}')"></div> |
||||
{% for photo in object.photos.all %} |
||||
<div class="swiper-slide" style="background-image:url('{% static photo.img.url %}')"></div> |
||||
{% endfor %} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{# <div class="col-lg-12">#} |
||||
{# <div class="triangle2"></div>#} |
||||
{# <div class="arr arr1"></div>#} |
||||
{# <div class="arr arr2"></div>#} |
||||
{# </div>#} |
||||
</div> |
||||
{# <div class="col-lg-12 sibl">#} |
||||
{# <p>Похожие работы</p>#} |
||||
{# </div>#} |
||||
{# <div class="gallMini disTab">#} |
||||
{# {% for worksell in worksell_related %}#} |
||||
{# <div class="col-lg-3">#} |
||||
{##} |
||||
{# <div class="insetCol box-sizing disTab">#} |
||||
{# {% thumbnail worksell.get_cover "265x265" crop="center" as im %}#} |
||||
{# <div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">#} |
||||
{# <div class="imgFigure"></div>#} |
||||
{# </div>#} |
||||
{# {% endthumbnail %}#} |
||||
{# </div>#} |
||||
{# </div>#} |
||||
{# {% endfor %}#} |
||||
{# </div>#} |
||||
|
||||
{% include 'partials/footer.html' %} |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
{% endblock %} |
||||
{% block js_block %} |
||||
<script src="{% static 'js/swiper.min.js' %}"></script> |
||||
<script> |
||||
var galleryTop = new Swiper('.gallery-top', { |
||||
nextButton: '.next3', |
||||
prevButton: '.prev3', |
||||
spaceBetween: 10, |
||||
}); |
||||
var galleryTop = new Swiper('.gallery-top', { |
||||
nextButton: '.next3', |
||||
prevButton: '.prev3', |
||||
spaceBetween: 15, |
||||
onSlideChangeEnd: function (swiper) { |
||||
var activeIndex = swiper.activeIndex; |
||||
$(galleryThumbs.slides).removeClass('is-selected'); |
||||
$(galleryThumbs.slides).eq(activeIndex).addClass('is-selected'); |
||||
galleryThumbs.slideTo(activeIndex, 300, false); |
||||
|
||||
} |
||||
|
||||
}); |
||||
var galleryThumbs = new Swiper('.gallery-thumbs', { |
||||
spaceBetween: 15, |
||||
freeMode: true, |
||||
centeredSlides: false, |
||||
slidesPerView: 6, |
||||
touchRatio: 0.2, |
||||
nextButton: '.arr2', |
||||
prevButton: '.arr1', |
||||
onClick: function (swiper, event) { |
||||
var clicked = swiper.clickedIndex |
||||
swiper.activeIndex = clicked; |
||||
swiper.updateClasses() |
||||
$(swiper.slides).removeClass('is-selected'); |
||||
$(swiper.clickedSlide).addClass('is-selected'); |
||||
galleryTop.slideTo(clicked, 300, false); |
||||
|
||||
} |
||||
}); |
||||
</script> |
||||
{% endblock %} |
||||
@ -0,0 +1,26 @@ |
||||
from django import template |
||||
from pprint import pprint, pformat |
||||
|
||||
from archilance import util |
||||
|
||||
|
||||
register = template.Library() |
||||
|
||||
@register.filter |
||||
def get_candidates(project): |
||||
return tuple(c.answer.author for c in project.candidates.all()) |
||||
|
||||
@register.filter |
||||
def get_new_answers(project): |
||||
return set(project.answers.filter(rejected=False)) - set(c.answer for c in project.candidates.filter(answer__rejected=False)) |
||||
|
||||
@register.filter |
||||
def get_candidate_answers(project): |
||||
return tuple(c.answer for c in project.candidates.filter(answer__rejected=False)) |
||||
|
||||
@register.filter |
||||
def get_rejected_answers(project): |
||||
return project.answers.filter(rejected=True) |
||||
|
||||
|
||||
# import code; code.interact(local=dict(globals(), **locals())) |
||||
Loading…
Reference in new issue