Merge branch 'setup' of https://bitbucket.org/PekopT/archilance into setup
commit
b9166f6dd3
20 changed files with 909 additions and 112 deletions
@ -0,0 +1,143 @@ |
||||
/** |
||||
* Created by mukhtar on 04.07.16. |
||||
*/ |
||||
|
||||
function getCookie(name) { |
||||
var cookieValue = null; |
||||
if (document.cookie && document.cookie != '') { |
||||
var cookies = document.cookie.split(';'); |
||||
for (var i = 0; i < cookies.length; i++) { |
||||
var cookie = jQuery.trim(cookies[i]); |
||||
if (cookie.substring(0, name.length + 1) == (name + '=')) { |
||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
return cookieValue; |
||||
} |
||||
|
||||
var SocketHandler = function () { |
||||
var url = 'ws://127.0.0.1:8888/chat'; |
||||
var sock = new WebSocket(url); |
||||
var intervalId; |
||||
sock.onopen = function () { |
||||
console.log("Start connect"); |
||||
intervalId = setInterval(function () { |
||||
sock.send('{"dummy": 1}'); |
||||
}, 150000); |
||||
}; |
||||
sock.onmessage = function (event) { |
||||
console.log(event.data); |
||||
alert(event.data); |
||||
var message = JSON.parse(event.data); |
||||
var inbox = document.getElementById('message-chat-space'); |
||||
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + |
||||
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' + |
||||
'<p class="textCommChat">' + message.msg + '</p></div>'; |
||||
|
||||
}; |
||||
|
||||
this.send_contact_message = function (userId) { |
||||
var data = { |
||||
"format_type": "add_message", |
||||
"user_id": userId |
||||
} |
||||
sock.send(JSON.stringify(data)); |
||||
console.log(data); |
||||
}; |
||||
|
||||
this.add_contact_message = function (messageData) { |
||||
console.log(messageData); |
||||
sock.send(JSON.stringify(messageData)); |
||||
}; |
||||
|
||||
this.send_message = function (form) { |
||||
var elements = form.elements; |
||||
var data = {}; |
||||
var i = 0; |
||||
for (var i; i < elements.length; i++) { |
||||
if (elements[i].name == 'message') { |
||||
data[elements[i].name] = elements[i].value; |
||||
} |
||||
} |
||||
sock.send(JSON.stringify(data)); |
||||
var textareaMessage = document.getElementById("message"); |
||||
textareaMessage.value = ""; |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
$(function () { |
||||
var socket = new SocketHandler(); |
||||
var form = document.getElementById('message_form'); |
||||
var csrftoken = getCookie('csrftoken'); |
||||
|
||||
// Вытащить сообщения для чата заказа
|
||||
$('.order-block').on('click', function () { |
||||
var orderId = $(this).attr('data-id'); |
||||
$("#chat-contractor-order #orderId").val(orderId); |
||||
var inbox = document.getElementById('message-chat-order-space'); |
||||
inbox.innerHTML = ''; |
||||
$.ajax({ |
||||
url: '/api/message', |
||||
type: 'GET', |
||||
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, |
||||
dataType: 'json', |
||||
success: function (json) { |
||||
$.each(json.results, function (i, v) { |
||||
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + |
||||
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' + |
||||
'<p class="textCommChat">' + v.text + '</p></div>'; |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
}); |
||||
|
||||
// Вытащить сообщения для конактов
|
||||
$('.user-block').on('click', function () { |
||||
var userId = $(this).attr('data-id'); |
||||
$("#contact-chat-form #recipentId").val(userId); |
||||
var inbox = document.getElementById('message-chat-space'); |
||||
inbox.innerHTML = ''; |
||||
$.ajax({ |
||||
url: '/api/message', |
||||
type: 'GET', |
||||
data: {csrfmiddlewaretoken: csrftoken, 'recipent__id': userId}, |
||||
dataType: 'json', |
||||
success: function (json) { |
||||
$.each(json.results, function (i, v) { |
||||
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + |
||||
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' + |
||||
'<p class="textCommChat">' + v.text + '</p></div>'; |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
}); |
||||
|
||||
// Добавить сообщение для контакта
|
||||
$('#contact-chat-add-message').on('click', function () { |
||||
var chatMessage = $("#chat").val(); |
||||
var recipentId = $("#recipentId").val(); |
||||
var senderId = $("#senderId").val(); |
||||
|
||||
socket.add_contact_message({ |
||||
"format_type": "add_message_contact", |
||||
"data": { |
||||
"sender_id": senderId, |
||||
"recipent_id": recipentId, |
||||
"chat_message": chatMessage, |
||||
} |
||||
}); |
||||
|
||||
$("#chat").val(""); |
||||
}); |
||||
|
||||
|
||||
}); |
||||
|
||||
|
||||
|
||||
@ -1,7 +1,14 @@ |
||||
from django.contrib import admin |
||||
from .models import Message |
||||
from .models import Message, Notes |
||||
|
||||
|
||||
class MessageAdmin(admin.ModelAdmin): |
||||
list_display = ('text', 'sender', 'recipent',) |
||||
|
||||
|
||||
class NotesAdmin(admin.ModelAdmin): |
||||
list_display = ('text', 'sender', 'recipent', 'order',) |
||||
|
||||
|
||||
admin.site.register(Message, MessageAdmin) |
||||
admin.site.register(Notes, NotesAdmin) |
||||
|
||||
@ -0,0 +1,26 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.6 on 2016-07-04 11:44 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('chat', '0004_auto_20160630_1204'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Notes', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('text', models.TextField()), |
||||
], |
||||
options={ |
||||
'verbose_name_plural': 'Сообщения', |
||||
'verbose_name': 'Сообщение', |
||||
}, |
||||
), |
||||
] |
||||
@ -0,0 +1,46 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.6 on 2016-07-04 15:11 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import django.utils.timezone |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('projects', '0037_auto_20160704_1444'), |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('chat', '0005_notes'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterModelOptions( |
||||
name='notes', |
||||
options={'verbose_name': 'Заметка', 'verbose_name_plural': 'Заметки'}, |
||||
), |
||||
migrations.AddField( |
||||
model_name='notes', |
||||
name='created', |
||||
field=models.DateTimeField(default=django.utils.timezone.now), |
||||
), |
||||
migrations.AddField( |
||||
model_name='notes', |
||||
name='order', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='order_notes', to='projects.Order'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='notes', |
||||
name='recipent', |
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='recipent_notes', to=settings.AUTH_USER_MODEL), |
||||
preserve_default=False, |
||||
), |
||||
migrations.AddField( |
||||
model_name='notes', |
||||
name='sender', |
||||
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='sender_notes', to=settings.AUTH_USER_MODEL), |
||||
preserve_default=False, |
||||
), |
||||
] |
||||
@ -0,0 +1,22 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.6 on 2016-07-04 11:44 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('projects', '0036_auto_20160630_1846'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='order', |
||||
name='contractor', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
] |
||||
@ -1,4 +1,5 @@ |
||||
from django.contrib import admin |
||||
from .models import WorkSell |
||||
from .models import WorkSell, WorkSellPhoto |
||||
|
||||
admin.site.register(WorkSell) |
||||
admin.site.register(WorkSellPhoto) |
||||
|
||||
@ -0,0 +1,21 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.6 on 2016-07-04 11:49 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations |
||||
import sorl.thumbnail.fields |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('work_sell', '0004_worksell_price'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='worksell', |
||||
name='img', |
||||
field=sorl.thumbnail.fields.ImageField(upload_to='worksell/worksell'), |
||||
), |
||||
] |
||||
@ -0,0 +1,29 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.6 on 2016-07-04 15:54 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import sorl.thumbnail.fields |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('work_sell', '0005_auto_20160704_1449'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='WorkSellPhoto', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('img', sorl.thumbnail.fields.ImageField(upload_to='worksell/worksell')), |
||||
('worksell', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='photos', to='work_sell.WorkSell')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Изображение Готовая работа', |
||||
'verbose_name_plural': 'Изображения Готовые работы', |
||||
}, |
||||
), |
||||
] |
||||
@ -1,16 +1,33 @@ |
||||
from django.db import models |
||||
from sorl.thumbnail import ImageField |
||||
from users.models import User |
||||
|
||||
|
||||
class WorkSell(models.Model): |
||||
name = models.CharField(max_length=255) |
||||
description = models.TextField(blank=True) |
||||
img = models.ImageField(upload_to='worksell/worksell') |
||||
img = ImageField(upload_to='worksell/worksell') |
||||
price = models.DecimalField(max_digits=10, decimal_places=0, default=0) |
||||
contractor = models.ForeignKey(User, related_name='work_sell') |
||||
|
||||
def __str__(self): |
||||
return self.name |
||||
|
||||
def is_author_for_work(self): |
||||
pass |
||||
|
||||
class Meta: |
||||
verbose_name = 'Готовая работа' |
||||
verbose_name_plural = 'Готовые работы' |
||||
|
||||
|
||||
class WorkSellPhoto(models.Model): |
||||
img = ImageField(upload_to='worksell/worksell') |
||||
worksell = models.ForeignKey(WorkSell, related_name='photos') |
||||
|
||||
def __str__(self): |
||||
return self.worksell.name |
||||
|
||||
class Meta: |
||||
verbose_name = 'Изображение Готовая работа' |
||||
verbose_name_plural = 'Изображения Готовые работы' |
||||
|
||||
@ -0,0 +1,219 @@ |
||||
{% extends 'partials/base.html' %} |
||||
{% load staticfiles %} |
||||
{% load thumbnail %} |
||||
{% block content %} |
||||
<body> |
||||
<div class="wrTop disTab"> |
||||
<div class="container-fluid topMain"> |
||||
<div class="row"> |
||||
<div class="col-lg-3"> |
||||
<div class="logo" onClick="window.location='/'"></div> |
||||
</div> |
||||
<div class="col-lg-7"> |
||||
<ul class="mainMenu"> |
||||
<li class="icon_tm1"> |
||||
<a href="javascript:void(0)">Биржа проектов</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm2"> |
||||
<a href="javascript:void(0)">Поиск исполнителей</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm3"> |
||||
<a href="javascript:void(0)">Работы на продажу</a> |
||||
<span></span> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
<div class="col-lg-2"> |
||||
<div class="imgProfile"> |
||||
<img src="img/profile.jpg" alt="profile-image"> |
||||
</div> |
||||
<div class="infoProfile disTab"> |
||||
<div class="btn-group" role="group"> |
||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
||||
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span> |
||||
</button> |
||||
<ul class="dropdown-menu menu-drop-new"> |
||||
<li class="icon_mm1"> |
||||
<a href="#"> |
||||
Войти заказчиком |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm2"> |
||||
<a href="#"> |
||||
Войти исполнителем |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm3"> |
||||
<a href="#"> |
||||
Сообщения |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm4"> |
||||
<a href="#"> |
||||
Счет |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm5"> |
||||
<a href="#"> |
||||
Настройки |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm6"> |
||||
<a href="#"> |
||||
FAQ |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
<div class="rating"> |
||||
<div class="ratingInset"></div> |
||||
<div class="iconRating"></div> |
||||
</div> |
||||
<p class="ratingPer">45%</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="container mainScore"> |
||||
<div class="row"> |
||||
<div class="col-lg-12 allProjects"> |
||||
<p class="titleScore">{{ object }}</p> |
||||
<div class="all all1"> |
||||
<p>предыдущий</p> |
||||
</div> |
||||
<div class="all all2"> |
||||
<p>следующий</p> |
||||
</div> |
||||
</div> |
||||
<div class="btnReadyBlock disTab"> |
||||
<div class="triangle1"></div> |
||||
<div class="col-lg-3"> |
||||
<p class="cenaReady">{{ object.price }} <i class="fa fa-rub"></i></p> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<a href="javascript:void(0)" class="linkReady LR1"> |
||||
купить |
||||
</a> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<a href="javascript:void(0)" class="linkReady LR2"> |
||||
Написать сообщение |
||||
</a> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<a href="javascript:void(0)" class="linkReady LR3"> |
||||
посмотреть контакты |
||||
</a> |
||||
</div> |
||||
</div> |
||||
<div class="desReadyBlock"> |
||||
<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> |
||||
<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.img.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.img.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"> |
||||
<div class="col-lg-3"> |
||||
<div class="insetCol box-sizing disTab"> |
||||
<div class="imgGal"> |
||||
<div class="imgFigure"></div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<div class="insetCol box-sizing disTab"> |
||||
<div class="imgGal"> |
||||
<div class="imgFigure"></div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</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,310 @@ |
||||
{% extends 'partials/base.html' %} |
||||
{% load staticfiles %} |
||||
{% load thumbnail %} |
||||
{% block content %} |
||||
|
||||
<div class="wrTop disTab"> |
||||
<div class="container-fluid topMain"> |
||||
<div class="row"> |
||||
<div class="col-lg-3"> |
||||
<div class="logo" onClick="window.location='/'"></div> |
||||
</div> |
||||
<div class="col-lg-7"> |
||||
<ul class="mainMenu"> |
||||
<li class="icon_tm1"> |
||||
<a href="javascript:void(0)">Биржа проектов</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm2"> |
||||
<a href="javascript:void(0)">Поиск исполнителей</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm3"> |
||||
<a href="javascript:void(0)">Работы на продажу</a> |
||||
<span></span> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
<div class="col-lg-2"> |
||||
<div class="imgProfile"> |
||||
<img src="img/profile.jpg" alt="profile-image"> |
||||
</div> |
||||
<div class="infoProfile disTab"> |
||||
<div class="btn-group" role="group"> |
||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
||||
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span> |
||||
</button> |
||||
<ul class="dropdown-menu menu-drop-new"> |
||||
<li class="icon_mm1"> |
||||
<a href="#"> |
||||
Войти заказчиком |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm2"> |
||||
<a href="#"> |
||||
Войти исполнителем |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm3"> |
||||
<a href="#"> |
||||
Сообщения |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm4"> |
||||
<a href="#"> |
||||
Счет |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm5"> |
||||
<a href="#"> |
||||
Настройки |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm6"> |
||||
<a href="#"> |
||||
FAQ |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
<div class="rating"> |
||||
<div class="ratingInset"></div> |
||||
<div class="iconRating"></div> |
||||
</div> |
||||
<p class="ratingPer">45%</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="container mainScore"> |
||||
<div class="row"> |
||||
<div class="col-lg-12"> |
||||
<p class="titleScore">Работы на продажу</p> |
||||
</div> |
||||
<div class="col-lg-12"> |
||||
<div class="filter clearfix"> |
||||
<div class="triangle1"></div> |
||||
<div class="titleF1 disTab"> |
||||
<div class="col-lg-3">Тип работ:</div> |
||||
<div class="col-lg-3">Специализации:</div> |
||||
<div class="col-lg-3"></div> |
||||
<div class="col-lg-3"></div> |
||||
</div> |
||||
<div class="polsF1 disTab"> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
</select> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
</select> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
</select> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
|
||||
</select> |
||||
</div> |
||||
</div> |
||||
<div class="titleF1 titleF2 disTab"> |
||||
<div class="col-lg-4">Тип работ:</div> |
||||
<div class="col-lg-8">Специализации:</div> |
||||
</div> |
||||
<div class="searchF1 polsF1 polsFF"> |
||||
<div class="col-lg-4"> |
||||
<input type="text" placeholder="От" class="box-sizing otInp"> |
||||
<input type="text" placeholder="До" class="box-sizing otInp"> |
||||
<select class="selectpicker2 valul"> |
||||
<option>$</option> |
||||
<option>$</option> |
||||
<option>$</option> |
||||
</select> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
|
||||
</select> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<a href="javascript:void(0)" class="findReal"> |
||||
найти исполнителя |
||||
</a> |
||||
</div> |
||||
<div class="col-lg-2"> |
||||
<a href="javascript:void(0)" class="clearSearch"> |
||||
Очистить фильтр |
||||
</a> |
||||
</div> |
||||
</div> |
||||
<div class="resSearchF1"> |
||||
<div class="col-lg-3"> |
||||
<p class="titleResF1">Расширенный поиск</p> |
||||
<button class="resButtonF1"> |
||||
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span> |
||||
</button> |
||||
</div> |
||||
<div class="col-lg-9"> |
||||
<div class="borderS1"></div> |
||||
</div> |
||||
</div> |
||||
<div class="slideRes disTab activeSlide"> |
||||
<div class="titleF1 disTab"> |
||||
<div class="col-lg-3">Тип работ:</div> |
||||
<div class="col-lg-3">Специализации:</div> |
||||
<div class="col-lg-3"></div> |
||||
<div class="col-lg-3">Специализации:</div> |
||||
</div> |
||||
<div class="polsF1 polsF2 disTab"> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
</select> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
</select> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
</select> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<select class="selectpicker"> |
||||
<option>Mustard</option> |
||||
</select> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="galleryWork disTab"> |
||||
{% for work in object_list %} |
||||
<div class="col-lg-3"> |
||||
<div class="insetCol box-sizing disTab"> |
||||
<a href="{% url 'work_sell:detail' work.pk %}"> |
||||
{% thumbnail work.img "265x265" crop="center" as im %} |
||||
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;"> |
||||
<div class="imgFigure"></div> |
||||
</div> |
||||
{% endthumbnail %} |
||||
</a> |
||||
<div class="cenaImg box-sizing"> |
||||
<div class="cenaImgInset"> |
||||
{{ work.price }} <i class="fa fa-rub"></i> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="insetCol2 box-sizing disTab"> |
||||
<p>{{ work }}</p> |
||||
|
||||
|
||||
<div class="buttonsImg" disTab> |
||||
<div class="insetBI insetBI1"> |
||||
<i class="fa fa-pencil"></i> |
||||
</div> |
||||
<div class="insetBI insetBI2"> |
||||
<i class="fa fa-times"></i> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<div class="insetCol box-sizing disTab"> |
||||
{% thumbnail work.img "265x265" crop="center" as im %} |
||||
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;"> |
||||
<div class="imgFigure"></div> |
||||
</div> |
||||
{% endthumbnail %} |
||||
<div class="cenaImg box-sizing"> |
||||
<div class="cenaImgInset"> |
||||
{{ work.price }} <i class="fa fa-rub"></i> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="insetCol2 box-sizing disTab"> |
||||
<p>{{ work }}</p> |
||||
|
||||
|
||||
<div class="buttonsImg" disTab> |
||||
<div class="insetBI insetBI1"> |
||||
<i class="fa fa-pencil"></i> |
||||
</div> |
||||
<div class="insetBI insetBI2"> |
||||
<i class="fa fa-times"></i> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="col-lg-3"> |
||||
<div class="insetCol box-sizing disTab"> |
||||
{% thumbnail work.img "265x265" crop="center" as im %} |
||||
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;"> |
||||
<div class="imgFigure"></div> |
||||
</div> |
||||
{% endthumbnail %} |
||||
<div class="cenaImg box-sizing"> |
||||
<div class="cenaImgInset"> |
||||
{{ work.price }} <i class="fa fa-rub"></i> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="insetCol2 box-sizing disTab"> |
||||
<p>{{ work }}</p> |
||||
|
||||
|
||||
<div class="buttonsImg" disTab> |
||||
<div class="insetBI insetBI1"> |
||||
<i class="fa fa-pencil"></i> |
||||
</div> |
||||
<div class="insetBI insetBI2"> |
||||
<i class="fa fa-times"></i> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endfor %} |
||||
</div> |
||||
<div class="col-lg-12 pagin"> |
||||
<nav> |
||||
<ul class="pagination"> |
||||
<li> |
||||
<a href="#" aria-label="Previous"> |
||||
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> |
||||
</a> |
||||
</li> |
||||
<li class="active"><a href="#">1</a></li> |
||||
<li><a href="#">2</a></li> |
||||
<li><a href="#">3</a></li> |
||||
<li><a href="#">4</a></li> |
||||
<li><a href="#">5</a></li> |
||||
<li>...</li> |
||||
<li><a href="#">17</a></li> |
||||
<li> |
||||
<a href="#" aria-label="Next"> |
||||
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> |
||||
</a> |
||||
</li> |
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
{% include 'partials/footer.html' %} |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
||||
@ -0,0 +1,13 @@ |
||||
from django.conf import urls |
||||
|
||||
from .views import ( |
||||
WorkSellsView, |
||||
WorkSellDetail, |
||||
) |
||||
|
||||
app_name = 'work_sell' |
||||
|
||||
urlpatterns = [ |
||||
urls.url(r'^$', WorkSellsView.as_view(), name='list'), |
||||
urls.url(r'^(?P<pk>\d+)/$', WorkSellDetail.as_view(), name='detail'), |
||||
] |
||||
@ -1,3 +1,14 @@ |
||||
from django.shortcuts import render |
||||
from django.views.generic import ListView, DetailView |
||||
|
||||
# Create your views here. |
||||
from .models import WorkSell |
||||
|
||||
|
||||
class WorkSellsView(ListView): |
||||
model = WorkSell |
||||
template_name = 'worksells_list.html' |
||||
|
||||
|
||||
class WorkSellDetail(DetailView): |
||||
model = WorkSell |
||||
template_name = 'worksell_detail.html' |
||||
|
||||
Loading…
Reference in new issue