├── Django_Deployment_to_Ubuntu_18.04.md ├── README.md ├── accounts ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── admin.cpython-37.pyc │ ├── apps.cpython-37.pyc │ ├── models.cpython-37.pyc │ ├── urls.cpython-37.pyc │ └── views.cpython-37.pyc ├── admin.py ├── apps.py ├── migrations │ ├── __init__.py │ └── __pycache__ │ │ └── __init__.cpython-37.pyc ├── models.py ├── tests.py ├── urls.py └── views.py ├── contacts ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── admin.cpython-37.pyc │ ├── apps.cpython-37.pyc │ ├── models.cpython-37.pyc │ ├── urls.cpython-37.pyc │ └── views.cpython-37.pyc ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-37.pyc │ │ └── __init__.cpython-37.pyc ├── models.py ├── tests.py ├── urls.py └── views.py ├── database_schema.md ├── db.sqlite3 ├── django_cheat_sheet.md ├── listings ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── admin.cpython-37.pyc │ ├── apps.cpython-37.pyc │ ├── choices.cpython-37.pyc │ ├── models.cpython-37.pyc │ ├── urls.cpython-37.pyc │ └── views.cpython-37.pyc ├── admin.py ├── apps.py ├── choices.py ├── migrations │ ├── 0001_initial.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-37.pyc │ │ └── __init__.cpython-37.pyc ├── models.py ├── tests.py ├── urls.py └── views.py ├── manage.py ├── media └── photos │ └── 2018 │ └── 12 │ └── 18 │ ├── 03132015_162118-1200x700.jpg │ ├── 03132015_162118-1200x700_DyYtbJ2.jpg │ ├── 03132015_162118-1200x700_ObtTz6G.jpg │ ├── 03132015_162118-1200x700_PepYytR.jpg │ ├── 03132015_162118-1200x700_QTevU6b.jpg │ ├── 03132015_162118-1200x700_xKeGGVf.jpg │ ├── 59-3129.jpg │ ├── 59-3129_Qf6K12n.jpg │ ├── 59-3129_jK9LlsR.jpg │ ├── 59-3129_ntyizQX.jpg │ ├── 59-3129_raU9Fg3.jpg │ ├── 59-3129_x0orZ1Y.jpg │ ├── 59-3129_yYwIeNs.jpg │ ├── Minimalist-Backgrounds-19-2560-x-1440.png │ ├── ZE4lucU.png │ ├── bfd0fafdacb2e551de25ab21fae2c644.jpg │ ├── bfd0fafdacb2e551de25ab21fae2c644_7vmQgf4.jpg │ ├── bfd0fafdacb2e551de25ab21fae2c644_JsdFbmi.jpg │ ├── bfd0fafdacb2e551de25ab21fae2c644_Rp7Q49r.jpg │ ├── bfd0fafdacb2e551de25ab21fae2c644_UsOgzrn.jpg │ ├── bfd0fafdacb2e551de25ab21fae2c644_msE8ASM.jpg │ ├── download.jpg │ ├── download_6GiH4aq.jpg │ ├── download_6rMUTS8.jpg │ ├── download_AkyX87K.jpg │ ├── download_dcZz6wK.jpg │ ├── download_m5y3spV.jpg │ ├── fUJ74.jpg │ ├── fUJ74_YrTBSrN.jpg │ ├── living-room.jpg │ ├── living-room_5pOrkWm.jpg │ ├── living-room_dUlZwea.jpg │ ├── living-room_wq04O9B.jpg │ ├── living-room_zT3pIvv.jpg │ ├── new-virtual-reality--The-Suite-Life-2-1050x590.jpg │ ├── new-virtual-reality--The-Suite-Life-2-1050x590_6B13oDM.jpg │ ├── new-virtual-reality--The-Suite-Life-2-1050x590_DXnYopZ.jpg │ ├── new-virtual-reality--The-Suite-Life-2-1050x590_FxBSFdF.jpg │ ├── new-virtual-reality--The-Suite-Life-2-1050x590_SvWdc8N.jpg │ ├── new-virtual-reality--The-Suite-Life-2-1050x590_Uf7Wsyv.jpg │ ├── turnberry.jpg │ ├── turnberry_3VZr33D.jpg │ ├── turnberry_40mbB9h.jpg │ ├── turnberry_AR6uLmX.jpg │ ├── turnberry_BhQFqHU.jpg │ └── turnberry_PBV0qJj.jpg ├── pages ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── admin.cpython-37.pyc │ ├── apps.cpython-37.pyc │ ├── models.cpython-37.pyc │ ├── urls.cpython-37.pyc │ └── views.cpython-37.pyc ├── admin.py ├── apps.py ├── migrations │ ├── __init__.py │ └── __pycache__ │ │ └── __init__.cpython-37.pyc ├── models.py ├── tests.py ├── urls.py └── views.py ├── realestate ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── settings.cpython-37.pyc │ ├── urls.cpython-37.pyc │ └── wsgi.cpython-37.pyc ├── settings.py ├── static │ ├── css │ │ ├── admin.css │ │ ├── all.css │ │ ├── bootstrap.css │ │ ├── lightbox.min.css │ │ └── style.css │ ├── img │ │ ├── .DS_Store │ │ ├── about.jpg │ │ ├── building.jpg │ │ ├── homes │ │ │ ├── home-1.jpg │ │ │ ├── home-2.jpg │ │ │ ├── home-3.jpg │ │ │ ├── home-4.jpg │ │ │ ├── home-5.jpg │ │ │ ├── home-6.jpg │ │ │ ├── home-inside-1.jpg │ │ │ ├── home-inside-2.jpg │ │ │ ├── home-inside-3.jpg │ │ │ ├── home-inside-4.jpg │ │ │ ├── home-inside-5.jpg │ │ │ └── home-inside-6.jpg │ │ ├── lightbox │ │ │ ├── close.png │ │ │ ├── loading.gif │ │ │ ├── next.png │ │ │ └── prev.png │ │ ├── logo.png │ │ ├── realtors │ │ │ ├── .DS_Store │ │ │ ├── jenny.jpg │ │ │ ├── kyle.jpg │ │ │ └── mark.jpg │ │ └── showcase.jpg │ ├── js │ │ ├── bootstrap.bundle.min.js │ │ ├── jquery-3.3.1.min.js │ │ ├── lightbox.min.js │ │ └── main.js │ └── webfonts │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.svg │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.svg │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.svg │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff │ │ └── fa-solid-900.woff2 ├── urls.py └── wsgi.py ├── realtors ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── admin.cpython-37.pyc │ ├── apps.cpython-37.pyc │ └── models.cpython-37.pyc ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-37.pyc │ │ └── __init__.cpython-37.pyc ├── models.py ├── tests.py └── views.py ├── requirements.txt ├── screenshots ├── s1.JPG ├── s2about.JPG ├── s3list.JPG ├── s4reg.JPG ├── s5adm.JPG └── s6r.JPG ├── static ├── admin │ ├── css │ │ ├── autocomplete.css │ │ ├── base.css │ │ ├── changelists.css │ │ ├── dashboard.css │ │ ├── fonts.css │ │ ├── forms.css │ │ ├── login.css │ │ ├── responsive.css │ │ ├── responsive_rtl.css │ │ ├── rtl.css │ │ ├── vendor │ │ │ └── select2 │ │ │ │ ├── LICENSE-SELECT2.md │ │ │ │ ├── select2.css │ │ │ │ └── select2.min.css │ │ └── widgets.css │ ├── fonts │ │ ├── LICENSE.txt │ │ ├── README.txt │ │ ├── Roboto-Bold-webfont.woff │ │ ├── Roboto-Light-webfont.woff │ │ └── Roboto-Regular-webfont.woff │ ├── img │ │ ├── LICENSE │ │ ├── README.txt │ │ ├── calendar-icons.svg │ │ ├── gis │ │ │ ├── move_vertex_off.svg │ │ │ └── move_vertex_on.svg │ │ ├── icon-addlink.svg │ │ ├── icon-alert.svg │ │ ├── icon-calendar.svg │ │ ├── icon-changelink.svg │ │ ├── icon-clock.svg │ │ ├── icon-deletelink.svg │ │ ├── icon-no.svg │ │ ├── icon-unknown-alt.svg │ │ ├── icon-unknown.svg │ │ ├── icon-viewlink.svg │ │ ├── icon-yes.svg │ │ ├── inline-delete.svg │ │ ├── search.svg │ │ ├── selector-icons.svg │ │ ├── sorting-icons.svg │ │ ├── tooltag-add.svg │ │ └── tooltag-arrowright.svg │ └── js │ │ ├── SelectBox.js │ │ ├── SelectFilter2.js │ │ ├── actions.js │ │ ├── actions.min.js │ │ ├── admin │ │ ├── DateTimeShortcuts.js │ │ └── RelatedObjectLookups.js │ │ ├── autocomplete.js │ │ ├── calendar.js │ │ ├── cancel.js │ │ ├── change_form.js │ │ ├── collapse.js │ │ ├── collapse.min.js │ │ ├── core.js │ │ ├── inlines.js │ │ ├── inlines.min.js │ │ ├── jquery.init.js │ │ ├── popup_response.js │ │ ├── prepopulate.js │ │ ├── prepopulate.min.js │ │ ├── prepopulate_init.js │ │ ├── timeparse.js │ │ ├── urlify.js │ │ └── vendor │ │ ├── jquery │ │ ├── LICENSE.txt │ │ ├── jquery.js │ │ └── jquery.min.js │ │ ├── select2 │ │ ├── LICENSE.md │ │ ├── i18n │ │ │ ├── ar.js │ │ │ ├── az.js │ │ │ ├── bg.js │ │ │ ├── ca.js │ │ │ ├── cs.js │ │ │ ├── da.js │ │ │ ├── de.js │ │ │ ├── el.js │ │ │ ├── en.js │ │ │ ├── es.js │ │ │ ├── et.js │ │ │ ├── eu.js │ │ │ ├── fa.js │ │ │ ├── fi.js │ │ │ ├── fr.js │ │ │ ├── gl.js │ │ │ ├── he.js │ │ │ ├── hi.js │ │ │ ├── hr.js │ │ │ ├── hu.js │ │ │ ├── id.js │ │ │ ├── is.js │ │ │ ├── it.js │ │ │ ├── ja.js │ │ │ ├── km.js │ │ │ ├── ko.js │ │ │ ├── lt.js │ │ │ ├── lv.js │ │ │ ├── mk.js │ │ │ ├── ms.js │ │ │ ├── nb.js │ │ │ ├── nl.js │ │ │ ├── pl.js │ │ │ ├── pt-BR.js │ │ │ ├── pt.js │ │ │ ├── ro.js │ │ │ ├── ru.js │ │ │ ├── sk.js │ │ │ ├── sr-Cyrl.js │ │ │ ├── sr.js │ │ │ ├── sv.js │ │ │ ├── th.js │ │ │ ├── tr.js │ │ │ ├── uk.js │ │ │ ├── vi.js │ │ │ ├── zh-CN.js │ │ │ └── zh-TW.js │ │ ├── select2.full.js │ │ └── select2.full.min.js │ │ └── xregexp │ │ ├── LICENSE.txt │ │ ├── xregexp.js │ │ └── xregexp.min.js ├── css │ ├── all.css │ ├── bootstrap.css │ ├── lightbox.min.css │ └── style.css ├── img │ ├── about.jpg │ ├── building.jpg │ ├── homes │ │ ├── home-1.jpg │ │ ├── home-2.jpg │ │ ├── home-3.jpg │ │ ├── home-4.jpg │ │ ├── home-5.jpg │ │ ├── home-6.jpg │ │ ├── home-inside-1.jpg │ │ ├── home-inside-2.jpg │ │ ├── home-inside-3.jpg │ │ ├── home-inside-4.jpg │ │ ├── home-inside-5.jpg │ │ └── home-inside-6.jpg │ ├── lightbox │ │ ├── close.png │ │ ├── loading.gif │ │ ├── next.png │ │ └── prev.png │ ├── logo.png │ ├── realtors │ │ ├── jenny.jpg │ │ ├── kyle.jpg │ │ └── mark.jpg │ └── showcase.jpg ├── js │ ├── bootstrap.bundle.min.js │ ├── jquery-3.3.1.min.js │ ├── lightbox.min.js │ └── main.js └── webfonts │ ├── fa-brands-400.eot │ ├── fa-brands-400.svg │ ├── fa-brands-400.ttf │ ├── fa-brands-400.woff │ ├── fa-brands-400.woff2 │ ├── fa-regular-400.eot │ ├── fa-regular-400.svg │ ├── fa-regular-400.ttf │ ├── fa-regular-400.woff │ ├── fa-regular-400.woff2 │ ├── fa-solid-900.eot │ ├── fa-solid-900.svg │ ├── fa-solid-900.ttf │ ├── fa-solid-900.woff │ └── fa-solid-900.woff2 ├── templates ├── accounts │ ├── dashboard.html │ ├── login.html │ └── register.html ├── admin │ └── base_site.html ├── base.html ├── listings │ ├── listing.html │ ├── listings.html │ └── search.html ├── pages │ ├── about.html │ └── index.html └── partials │ ├── _alerts.html │ ├── _footer.html │ ├── _navbar.html │ └── _topbar.html └── webapp_features.md /README.md: -------------------------------------------------------------------------------- 1 | # Real Estate Django Web App 2 | 3 | A real estate listings website built with `python` `django` `bootstrap`. 4 | 5 | A simple, reponsive website. Built with: 6 | 7 | - Python 🐍 8 | - Django 🎸 9 | - Bootstrap 4 🌈 10 | - Vanilla JS - ES6 11 | - JQuery 12 | 13 | If you are new to Django, checkout the [Django 2.x Cheat Sheet](https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App/blob/master/django_cheat_sheet.md) 14 | 15 | If you want to deploy this Web App In Ubuntu 18.04 Server, Please Follow this [Guide](https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App/blob/master/Django_Deployment_to_Ubuntu_18.04.md) 16 | 17 | ## How to run this project (Ubuntu 18.04) 18 | 19 | 1. **Clone the project** 20 | 21 | ```sh 22 | git clone https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App.git 23 | ``` 24 | 25 | 2. **Make sure you are in *Real-Estate-Django-Web-App* folder** 26 | 27 | 1. Install all dependencies 28 | 29 | ```sh 30 | pip install -r requirements.txt 31 | ``` 32 | 33 | 3. **Install PostgreSQL in your Ubuntu 18.04** 34 | 35 | 1. Enable PostgreSQL Apt Repository 36 | 37 | ```sh 38 | sudo apt-get install wget ca-certificates 39 | 40 | wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - 41 | 42 | # Now add the repository to your system. 43 | 44 | sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list' 45 | ``` 46 | 47 | 2. Install PostgreSQL on Ubuntu 48 | 49 | ```sh 50 | sudo apt-get update 51 | sudo apt-get install postgresql postgresql-contrib 52 | ``` 53 | 54 | 3. Connect to PostgreSQL 55 | 56 | ```sh 57 | sudo su - postgres 58 | psql 59 | ``` 60 | 61 | Now you are logged in to PostgreSQL database server. To check login info use following command from the database command prompt. 62 | 63 | ```sh 64 | postgres-# \conninfo 65 | ``` 66 | 67 | 4. Create a database 68 | 69 | ```sh 70 | CREATE DATABASE real_estate; 71 | ``` 72 | 73 | 5. Create user 74 | 75 | ```sh 76 | CREATE USER pks WITH PASSWORD 'abc123!'; 77 | ``` 78 | 79 | 4. **Run Migrations** 80 | 81 | ```sh 82 | python manage.py makemigrations 83 | python manage.py migrate 84 | ``` 85 | 86 | 5. **Run Server** 87 | 88 | ```sh 89 | python manage.py runserver 90 | ``` 91 | 92 | And you are good to go. 93 | 94 | 95 | **To run with SQLite only** 96 | 97 | Go inside the 'realestate' folder and open 'settings.py' file and replace 98 | 99 | ```sh 100 | DATABASES = { 101 | 'default': { 102 | 'ENGINE': 'django.db.backends.postgresql', 103 | 'NAME': 'real_estate' , 104 | 'USER': 'pks', 105 | 'PASSWORD': 'abc123!', 106 | 'HOST':'localhost', 107 | 108 | } 109 | } 110 | ``` 111 | 112 | To: 113 | 114 | ```sh 115 | DATABASES = { 116 | 'default': { 117 | 'ENGINE': 'django.db.backends.sqlite3', 118 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 119 | } 120 | } 121 | 122 | ``` 123 | 124 | This is the default configuration of Django database. 125 | 126 | 127 | **Backend** 128 | 129 | For Database I have used Postgres Database Name: real_estate 130 | 131 | Note: Please change those gmail credentials from real_estate folder you will get settings.py inside that file you will see username and password mentioned as place your Username and Password. Also do that same thing from Contacts folder views.py you will see YourEmail mentioned on line number 33. 132 | 133 | ### Screenshots 134 | 135 | - **HOME** 136 | 137 | ![Home](https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App/blob/master/screenshots/s1.JPG) 138 | 139 | - **Listings** 140 | 141 | 142 | ![Listings](https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App/blob/master/screenshots/s3list.JPG) 143 | 144 | - **Registration** 145 | 146 | ![Registration](https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App/blob/master/screenshots/s4reg.JPG) 147 | 148 | - **Admin Panel - 1** 149 | 150 | ![Admin](https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App/blob/master/screenshots/s5adm.JPG) 151 | 152 | - **Admin Panel - 2** 153 | 154 | ![Admin](https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App/blob/master/screenshots/s6r.JPG) 155 | 156 | - **About** 157 | 158 | ![About ](https://github.com/TheCaffeineDev/Real-Estate-Django-Web-App/blob/master/screenshots/s2about.JPG) 159 | 160 | 161 | ## Acknowledgments 162 | 163 | Many thanks to [@bradtraversy](https://github.com/bradtraversy) for his awesome course. 164 | 165 | ##### References 166 | 167 | 1. https://www.traversymedia.com/ 168 | 2. https://www.djangoproject.com/ 169 | -------------------------------------------------------------------------------- /accounts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/__init__.py -------------------------------------------------------------------------------- /accounts/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /accounts/__pycache__/admin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/__pycache__/admin.cpython-37.pyc -------------------------------------------------------------------------------- /accounts/__pycache__/apps.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/__pycache__/apps.cpython-37.pyc -------------------------------------------------------------------------------- /accounts/__pycache__/models.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/__pycache__/models.cpython-37.pyc -------------------------------------------------------------------------------- /accounts/__pycache__/urls.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/__pycache__/urls.cpython-37.pyc -------------------------------------------------------------------------------- /accounts/__pycache__/views.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/__pycache__/views.cpython-37.pyc -------------------------------------------------------------------------------- /accounts/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /accounts/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AccountsConfig(AppConfig): 5 | name = 'accounts' 6 | -------------------------------------------------------------------------------- /accounts/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/migrations/__init__.py -------------------------------------------------------------------------------- /accounts/migrations/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/accounts/migrations/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /accounts/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /accounts/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /accounts/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | 3 | from . import views 4 | 5 | urlpatterns = [ 6 | path('login', views.login, name='login'), 7 | path('register', views.register, name='register'), 8 | path('logout', views.logout, name='logout'), 9 | path('dashboard', views.dashboard, name='dashboard') 10 | ] -------------------------------------------------------------------------------- /accounts/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render, redirect 2 | from django.contrib import messages, auth 3 | from django.contrib.auth.models import User 4 | from contacts.models import Contact 5 | 6 | def register(request): 7 | if request.method == 'POST': 8 | # Get form values 9 | first_name = request.POST['first_name'] 10 | last_name = request.POST['last_name'] 11 | username = request.POST['username'] 12 | email = request.POST['email'] 13 | password = request.POST['password'] 14 | password2 = request.POST['password2'] 15 | 16 | # Check if passwords match 17 | if password == password2: 18 | # Check username 19 | if User.objects.filter(username=username).exists(): 20 | messages.error(request, 'That username is taken') 21 | return redirect('register') 22 | else: 23 | if User.objects.filter(email=email).exists(): 24 | messages.error(request, 'That email is being used') 25 | return redirect('register') 26 | else: 27 | # Looks good 28 | user = User.objects.create_user(username=username, password=password,email=email, first_name=first_name, last_name=last_name) 29 | # Login after register 30 | # auth.login(request, user) 31 | # messages.success(request, 'You are now logged in') 32 | # return redirect('index') 33 | user.save() 34 | messages.success(request, 'You are now registered and can log in') 35 | return redirect('login') 36 | else: 37 | messages.error(request, 'Passwords do not match') 38 | return redirect('register') 39 | else: 40 | return render(request, 'accounts/register.html') 41 | 42 | def login(request): 43 | if request.method == 'POST': 44 | username = request.POST['username'] 45 | password = request.POST['password'] 46 | 47 | user = auth.authenticate(username=username, password=password) 48 | 49 | if user is not None: 50 | auth.login(request, user) 51 | messages.success(request, 'You are now logged in') 52 | return redirect('dashboard') 53 | else: 54 | messages.error(request, 'Invalid credentials') 55 | return redirect('login') 56 | else: 57 | return render(request, 'accounts/login.html') 58 | 59 | def logout(request): 60 | if request.method == 'POST': 61 | auth.logout(request) 62 | messages.success(request, 'You are now logged out') 63 | return redirect('index') 64 | 65 | def dashboard(request): 66 | user_contacts = Contact.objects.order_by('-contact_date').filter(user_id=request.user.id) 67 | 68 | context = { 69 | 'contacts': user_contacts 70 | } 71 | return render(request, 'accounts/dashboard.html', context) -------------------------------------------------------------------------------- /contacts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/__init__.py -------------------------------------------------------------------------------- /contacts/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /contacts/__pycache__/admin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/__pycache__/admin.cpython-37.pyc -------------------------------------------------------------------------------- /contacts/__pycache__/apps.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/__pycache__/apps.cpython-37.pyc -------------------------------------------------------------------------------- /contacts/__pycache__/models.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/__pycache__/models.cpython-37.pyc -------------------------------------------------------------------------------- /contacts/__pycache__/urls.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/__pycache__/urls.cpython-37.pyc -------------------------------------------------------------------------------- /contacts/__pycache__/views.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/__pycache__/views.cpython-37.pyc -------------------------------------------------------------------------------- /contacts/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Contact 4 | 5 | class ContactAdmin(admin.ModelAdmin): 6 | list_display = ('id', 'name', 'listing', 'email', 'contact_date') 7 | list_display_links = ('id', 'name') 8 | search_fields = ('name', 'email', 'listing') 9 | list_per_page = 25 10 | 11 | admin.site.register(Contact, ContactAdmin) -------------------------------------------------------------------------------- /contacts/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ContactsConfig(AppConfig): 5 | name = 'contacts' 6 | -------------------------------------------------------------------------------- /contacts/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2018-12-18 18:56 2 | 3 | import datetime 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | initial = True 10 | 11 | dependencies = [ 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Contact', 17 | fields=[ 18 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 19 | ('listing', models.CharField(max_length=200)), 20 | ('listing_id', models.IntegerField()), 21 | ('name', models.CharField(max_length=200)), 22 | ('email', models.CharField(max_length=100)), 23 | ('phone', models.CharField(max_length=100)), 24 | ('message', models.TextField(blank=True)), 25 | ('contact_date', models.DateTimeField(blank=True, default=datetime.datetime.now)), 26 | ('user_id', models.IntegerField(blank=True)), 27 | ], 28 | ), 29 | ] 30 | -------------------------------------------------------------------------------- /contacts/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/migrations/__init__.py -------------------------------------------------------------------------------- /contacts/migrations/__pycache__/0001_initial.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/migrations/__pycache__/0001_initial.cpython-37.pyc -------------------------------------------------------------------------------- /contacts/migrations/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/contacts/migrations/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /contacts/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from datetime import datetime 3 | 4 | class Contact(models.Model): 5 | listing = models.CharField(max_length=200) 6 | listing_id = models.IntegerField() 7 | name = models.CharField(max_length=200) 8 | email = models.CharField(max_length=100) 9 | phone = models.CharField(max_length=100) 10 | message = models.TextField(blank=True) 11 | contact_date = models.DateTimeField(default=datetime.now, blank=True) 12 | user_id = models.IntegerField(blank=True) 13 | def __str__(self): 14 | return self.name -------------------------------------------------------------------------------- /contacts/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /contacts/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | 3 | from . import views 4 | 5 | urlpatterns = [ 6 | path('contact', views.contact, name='contact') 7 | ] -------------------------------------------------------------------------------- /contacts/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render, redirect 2 | from django.contrib import messages 3 | from django.core.mail import send_mail 4 | from .models import Contact 5 | 6 | def contact(request): 7 | if request.method == 'POST': 8 | listing_id = request.POST['listing_id'] 9 | listing = request.POST['listing'] 10 | name = request.POST['name'] 11 | email = request.POST['email'] 12 | phone = request.POST['phone'] 13 | message = request.POST['message'] 14 | user_id = request.POST['user_id'] 15 | realtor_email = request.POST['realtor_email'] 16 | 17 | # Check if user has made inquiry already 18 | if request.user.is_authenticated: 19 | user_id = request.user.id 20 | has_contacted = Contact.objects.all().filter(listing_id=listing_id, user_id=user_id) 21 | if has_contacted: 22 | messages.error(request, 'You have already made an inquiry for this listing') 23 | return redirect('/listings/'+listing_id) 24 | 25 | contact = Contact(listing=listing, listing_id=listing_id, name=name, email=email, phone=phone, message=message, user_id=user_id ) 26 | 27 | contact.save() 28 | 29 | # Send email 30 | # send_mail( 31 | # 'Property Listing Inquiry', 32 | # 'There has been an inquiry for ' + listing + '. Sign into the admin panel for more info', 33 | # 'iprabhatdev@gmail.com', 34 | # [realtor_email, 'random@gmail.com'], 35 | # fail_silently=False 36 | # ) 37 | 38 | messages.success(request, 'Your request has been submitted, a realtor will get back to you soon') 39 | return redirect('/listings/'+listing_id) 40 | -------------------------------------------------------------------------------- /database_schema.md: -------------------------------------------------------------------------------- 1 | # MODEL/DB FIELDS 2 | 3 | ### LISTING 4 | - id: INT 5 | - realtor: INT (FOREIGN KEY [realtor]) 6 | - title: STR 7 | - address: STR 8 | - city: STR 9 | - state: STR 10 | - zipcode: STR 11 | - description: TEXT 12 | - price: INT 13 | - bedrooms: INT 14 | - bathrooms: INT 15 | - garage: INT [0] 16 | - sqft: INT 17 | - lot_size: FLOAT 18 | - is_published: BOOL [true] 19 | - list_date: DATE 20 | - photo_main: STR 21 | - photo_1: STR 22 | - photo_2: STR 23 | - photo_3: STR 24 | - photo_4: STR 25 | - photo_5: STR 26 | - photo_6: STR 27 | 28 | 29 | ### REALTOR 30 | - id: INT 31 | 32 | - name: STR 33 | - photo: STR 34 | - description: TEXT 35 | - email: STR 36 | - phone: STR 37 | - is_mvp: BOOL [0] 38 | - hire_date: DATE 39 | 40 | 41 | ### CONTACT 42 | - id: INT 43 | - user_id: INT 44 | - listing: INT 45 | - listing_id: INT 46 | - name: STR 47 | - email: STR 48 | - phone: STR 49 | - message: TEXT 50 | - contact_date: DATE -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/db.sqlite3 -------------------------------------------------------------------------------- /django_cheat_sheet.md: -------------------------------------------------------------------------------- 1 | # Django 2.x Cheat Sheet 2 | 3 | ### Creating a virtual environment 4 | 5 | We need to create a virtual env for our app to run in: [More Here](https://docs.python.org/3/library/venv.html) 6 | Run this command in whatever folder you want to create your venv folder 7 | 8 | ``` 9 | python -m venv ./venv 10 | ``` 11 | 12 | ### Activate the virtualenv 13 | 14 | ``` 15 | # Mac/Linux 16 | source ./venv/bin/activate 17 | 18 | # Windows 19 | venv\Scripts\activate.bat - May need to add full path (c:\users\....venv\Scripts\activate.bat) 20 | ``` 21 | 22 | ### Escape from venv 23 | 24 | ``` 25 | deactivate 26 | ``` 27 | 28 | ### Check packages installed in that venv 29 | 30 | ``` 31 | pip freeze 32 | ``` 33 | 34 | ### Install Django 35 | 36 | ``` 37 | pip install django 38 | ``` 39 | 40 | ### Create your project 41 | 42 | ``` 43 | django-admin startproject PROJECTNAME 44 | ``` 45 | 46 | ### Run Server (http://127.0.0.1:8000) CTRL+C to stop 47 | 48 | ``` 49 | python manage.py runserver 50 | ``` 51 | 52 | ### Create an app 53 | ``` 54 | python manage.py start app APPNAME 55 | ``` 56 | 57 | ### Create migrations 58 | ``` 59 | python manage.py makemigrations 60 | ``` 61 | 62 | ### Run migration 63 | ``` 64 | python manage.py migrate 65 | ``` 66 | 67 | ### Collect Static Files 68 | ``` 69 | python manage.py collectstatic 70 | ``` 71 | -------------------------------------------------------------------------------- /listings/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/__init__.py -------------------------------------------------------------------------------- /listings/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /listings/__pycache__/admin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/__pycache__/admin.cpython-37.pyc -------------------------------------------------------------------------------- /listings/__pycache__/apps.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/__pycache__/apps.cpython-37.pyc -------------------------------------------------------------------------------- /listings/__pycache__/choices.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/__pycache__/choices.cpython-37.pyc -------------------------------------------------------------------------------- /listings/__pycache__/models.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/__pycache__/models.cpython-37.pyc -------------------------------------------------------------------------------- /listings/__pycache__/urls.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/__pycache__/urls.cpython-37.pyc -------------------------------------------------------------------------------- /listings/__pycache__/views.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/__pycache__/views.cpython-37.pyc -------------------------------------------------------------------------------- /listings/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Listing 4 | 5 | class ListingAdmin(admin.ModelAdmin): 6 | list_display = ('id', 'title', 'is_published', 'price', 'list_date', 'realtor') 7 | list_display_links = ('id', 'title') 8 | list_filter = ('realtor',) 9 | list_editable = ('is_published',) 10 | search_fields = ('title', 'description', 'address', 'city', 'state', 'zipcode', 'price') 11 | list_per_page = 25 12 | 13 | admin.site.register(Listing, ListingAdmin) -------------------------------------------------------------------------------- /listings/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ListingsConfig(AppConfig): 5 | name = 'listings' 6 | -------------------------------------------------------------------------------- /listings/choices.py: -------------------------------------------------------------------------------- 1 | bedroom_choices = { 2 | '1':1, 3 | '2':2, 4 | '3':3, 5 | '4':4, 6 | '5':5, 7 | '6':6, 8 | '7':7, 9 | '8':8, 10 | '9':9, 11 | '10':10 12 | } 13 | 14 | price_choices = { 15 | '100000':'$100,000', 16 | '200000':'$200,000', 17 | '300000':'$300,000', 18 | '400000':'$400,000', 19 | '500000':'$500,000', 20 | '600000':'$600,000', 21 | '700000':'$700,000', 22 | '800000':'$800,000', 23 | '900000':'$900,000', 24 | '1000000':'$1M+', 25 | } 26 | 27 | state_choices = { 28 | 29 | 'AP': 'Andra Pradesh', 30 | 'HYD' : 'Hyderabad' , 31 | 'AP' : 'Arunachal Pradesh', 32 | 'AS':'Assam', 33 | 'BH':'Bihar', 34 | 'P':'Patna', 35 | 'CHG':'Chhattisgarh', 36 | 'Rp':'Raipur', 37 | 'G': 'Goa', 38 | 'GU':'Gujarat', 39 | 'H': 'Haryana', 40 | 'HP': 'Himachal Pradesh', 41 | 'JAK' : 'Jammu and Kashmir', 42 | 'JK': 'Jharkhand', 43 | 'RCH': 'Ranchi', 44 | 'KR': 'Karnataka', 45 | 'KRL' : 'Kerala', 46 | 'MP' : 'Madya Pradesh', 47 | 'BP' : 'Bhopal', 48 | 'MP':'Maharashtra', 49 | 'OD' : 'Orissa' 50 | 51 | } -------------------------------------------------------------------------------- /listings/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2018-12-18 15:11 2 | 3 | import datetime 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | initial = True 11 | 12 | dependencies = [ 13 | ('realtors', '0001_initial'), 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='Listing', 19 | fields=[ 20 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 21 | ('title', models.CharField(max_length=200)), 22 | ('address', models.CharField(max_length=200)), 23 | ('city', models.CharField(max_length=100)), 24 | ('state', models.CharField(max_length=100)), 25 | ('zipcode', models.CharField(max_length=20)), 26 | ('description', models.TextField(blank=True)), 27 | ('price', models.IntegerField()), 28 | ('bedrooms', models.IntegerField()), 29 | ('bathrooms', models.DecimalField(decimal_places=1, max_digits=2)), 30 | ('garage', models.IntegerField(default=0)), 31 | ('sqft', models.IntegerField()), 32 | ('lot_size', models.DecimalField(decimal_places=1, max_digits=5)), 33 | ('photo_main', models.ImageField(upload_to='photos/%Y/%m/%d/')), 34 | ('photo_1', models.ImageField(blank=True, upload_to='photos/%Y/%m/%d/')), 35 | ('photo_2', models.ImageField(blank=True, upload_to='photos/%Y/%m/%d/')), 36 | ('photo_3', models.ImageField(blank=True, upload_to='photos/%Y/%m/%d/')), 37 | ('photo_4', models.ImageField(blank=True, upload_to='photos/%Y/%m/%d/')), 38 | ('photo_5', models.ImageField(blank=True, upload_to='photos/%Y/%m/%d/')), 39 | ('photo_6', models.ImageField(blank=True, upload_to='photos/%Y/%m/%d/')), 40 | ('is_published', models.BooleanField(default=True)), 41 | ('list_date', models.DateTimeField(blank=True, default=datetime.datetime.now)), 42 | ('realtor', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='realtors.Realtor')), 43 | ], 44 | ), 45 | ] 46 | -------------------------------------------------------------------------------- /listings/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/migrations/__init__.py -------------------------------------------------------------------------------- /listings/migrations/__pycache__/0001_initial.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/migrations/__pycache__/0001_initial.cpython-37.pyc -------------------------------------------------------------------------------- /listings/migrations/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/listings/migrations/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /listings/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from datetime import datetime 3 | from realtors.models import Realtor 4 | 5 | class Listing(models.Model): 6 | realtor = models.ForeignKey(Realtor, on_delete=models.DO_NOTHING) 7 | title = models.CharField(max_length=200) 8 | address = models.CharField(max_length=200) 9 | city = models.CharField(max_length=100) 10 | state = models.CharField(max_length=100) 11 | zipcode = models.CharField(max_length=20) 12 | description = models.TextField(blank=True) 13 | price = models.IntegerField() 14 | bedrooms = models.IntegerField() 15 | bathrooms = models.DecimalField(max_digits=2, decimal_places=1) 16 | garage = models.IntegerField(default=0) 17 | sqft = models.IntegerField() 18 | lot_size = models.DecimalField(max_digits=5, decimal_places=1) 19 | photo_main = models.ImageField(upload_to='photos/%Y/%m/%d/') 20 | photo_1 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True) 21 | photo_2 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True) 22 | photo_3 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True) 23 | photo_4 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True) 24 | photo_5 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True) 25 | photo_6 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True) 26 | is_published = models.BooleanField(default=True) 27 | list_date = models.DateTimeField(default=datetime.now, blank=True) 28 | def __str__(self): 29 | return self.title -------------------------------------------------------------------------------- /listings/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /listings/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | 3 | from . import views 4 | 5 | urlpatterns = [ 6 | path('', views.index, name='listings'), 7 | path('', views.listing, name='listing'), 8 | path('search', views.search, name='search'), 9 | ] -------------------------------------------------------------------------------- /listings/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import get_object_or_404, render 2 | from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator 3 | from .choices import price_choices, bedroom_choices, state_choices 4 | 5 | from .models import Listing 6 | 7 | def index(request): 8 | listings = Listing.objects.order_by('-list_date').filter(is_published=True) 9 | 10 | paginator = Paginator(listings, 6) 11 | page = request.GET.get('page') 12 | paged_listings = paginator.get_page(page) 13 | 14 | context = { 15 | 'listings': paged_listings 16 | } 17 | 18 | return render(request, 'listings/listings.html', context) 19 | 20 | def listing(request, listing_id): 21 | listing = get_object_or_404(Listing, pk=listing_id) 22 | 23 | context = { 24 | 'listing': listing 25 | } 26 | 27 | return render(request, 'listings/listing.html', context) 28 | 29 | def search(request): 30 | queryset_list = Listing.objects.order_by('-list_date') 31 | 32 | # Keywords 33 | if 'keywords' in request.GET: 34 | keywords = request.GET['keywords'] 35 | if keywords: 36 | queryset_list = queryset_list.filter(description__icontains=keywords) 37 | 38 | # City 39 | if 'city' in request.GET: 40 | city = request.GET['city'] 41 | if city: 42 | queryset_list = queryset_list.filter(city__iexact=city) 43 | 44 | # State 45 | if 'state' in request.GET: 46 | state = request.GET['state'] 47 | if state: 48 | queryset_list = queryset_list.filter(state__iexact=state) 49 | 50 | # Bedrooms 51 | if 'bedrooms' in request.GET: 52 | bedrooms = request.GET['bedrooms'] 53 | if bedrooms: 54 | queryset_list = queryset_list.filter(bedrooms__lte=bedrooms) 55 | 56 | # Price 57 | if 'price' in request.GET: 58 | price = request.GET['price'] 59 | if price: 60 | queryset_list = queryset_list.filter(price__lte=price) 61 | 62 | context = { 63 | 'state_choices': state_choices, 64 | 'bedroom_choices': bedroom_choices, 65 | 'price_choices': price_choices, 66 | 'listings': queryset_list, 67 | 'values': request.GET 68 | } 69 | 70 | return render(request, 'listings/search.html', context) -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == '__main__': 6 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'realestate.settings') 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError as exc: 10 | raise ImportError( 11 | "Couldn't import Django. Are you sure it's installed and " 12 | "available on your PYTHONPATH environment variable? Did you " 13 | "forget to activate a virtual environment?" 14 | ) from exc 15 | execute_from_command_line(sys.argv) 16 | -------------------------------------------------------------------------------- /media/photos/2018/12/18/03132015_162118-1200x700.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/03132015_162118-1200x700.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/03132015_162118-1200x700_DyYtbJ2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/03132015_162118-1200x700_DyYtbJ2.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/03132015_162118-1200x700_ObtTz6G.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/03132015_162118-1200x700_ObtTz6G.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/03132015_162118-1200x700_PepYytR.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/03132015_162118-1200x700_PepYytR.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/03132015_162118-1200x700_QTevU6b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/03132015_162118-1200x700_QTevU6b.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/03132015_162118-1200x700_xKeGGVf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/03132015_162118-1200x700_xKeGGVf.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/59-3129.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/59-3129.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/59-3129_Qf6K12n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/59-3129_Qf6K12n.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/59-3129_jK9LlsR.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/59-3129_jK9LlsR.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/59-3129_ntyizQX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/59-3129_ntyizQX.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/59-3129_raU9Fg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/59-3129_raU9Fg3.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/59-3129_x0orZ1Y.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/59-3129_x0orZ1Y.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/59-3129_yYwIeNs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/59-3129_yYwIeNs.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/Minimalist-Backgrounds-19-2560-x-1440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/Minimalist-Backgrounds-19-2560-x-1440.png -------------------------------------------------------------------------------- /media/photos/2018/12/18/ZE4lucU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/ZE4lucU.png -------------------------------------------------------------------------------- /media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_7vmQgf4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_7vmQgf4.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_JsdFbmi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_JsdFbmi.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_Rp7Q49r.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_Rp7Q49r.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_UsOgzrn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_UsOgzrn.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_msE8ASM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/bfd0fafdacb2e551de25ab21fae2c644_msE8ASM.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/download.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/download.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/download_6GiH4aq.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/download_6GiH4aq.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/download_6rMUTS8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/download_6rMUTS8.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/download_AkyX87K.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/download_AkyX87K.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/download_dcZz6wK.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/download_dcZz6wK.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/download_m5y3spV.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/download_m5y3spV.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/fUJ74.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/fUJ74.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/fUJ74_YrTBSrN.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/fUJ74_YrTBSrN.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/living-room.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/living-room.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/living-room_5pOrkWm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/living-room_5pOrkWm.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/living-room_dUlZwea.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/living-room_dUlZwea.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/living-room_wq04O9B.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/living-room_wq04O9B.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/living-room_zT3pIvv.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/living-room_zT3pIvv.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_6B13oDM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_6B13oDM.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_DXnYopZ.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_DXnYopZ.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_FxBSFdF.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_FxBSFdF.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_SvWdc8N.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_SvWdc8N.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_Uf7Wsyv.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/new-virtual-reality--The-Suite-Life-2-1050x590_Uf7Wsyv.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/turnberry.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/turnberry.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/turnberry_3VZr33D.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/turnberry_3VZr33D.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/turnberry_40mbB9h.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/turnberry_40mbB9h.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/turnberry_AR6uLmX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/turnberry_AR6uLmX.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/turnberry_BhQFqHU.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/turnberry_BhQFqHU.jpg -------------------------------------------------------------------------------- /media/photos/2018/12/18/turnberry_PBV0qJj.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/media/photos/2018/12/18/turnberry_PBV0qJj.jpg -------------------------------------------------------------------------------- /pages/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/__init__.py -------------------------------------------------------------------------------- /pages/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pages/__pycache__/admin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/__pycache__/admin.cpython-37.pyc -------------------------------------------------------------------------------- /pages/__pycache__/apps.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/__pycache__/apps.cpython-37.pyc -------------------------------------------------------------------------------- /pages/__pycache__/models.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/__pycache__/models.cpython-37.pyc -------------------------------------------------------------------------------- /pages/__pycache__/urls.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/__pycache__/urls.cpython-37.pyc -------------------------------------------------------------------------------- /pages/__pycache__/views.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/__pycache__/views.cpython-37.pyc -------------------------------------------------------------------------------- /pages/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /pages/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PagesConfig(AppConfig): 5 | name = 'pages' 6 | -------------------------------------------------------------------------------- /pages/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/migrations/__init__.py -------------------------------------------------------------------------------- /pages/migrations/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/pages/migrations/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /pages/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /pages/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /pages/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | 3 | from . import views 4 | 5 | urlpatterns = [ 6 | path('',views.index,name ='index'), 7 | path('about',views.about,name ='about'), 8 | ] 9 | -------------------------------------------------------------------------------- /pages/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.http import HttpResponse 3 | from listings.choices import price_choices, bedroom_choices, state_choices 4 | 5 | from listings.models import Listing 6 | from realtors.models import Realtor 7 | 8 | def index(request): 9 | listings = Listing.objects.order_by('-list_date').filter(is_published=True)[:3] 10 | 11 | context = { 12 | 'listings': listings, 13 | 'state_choices': state_choices, 14 | 'bedroom_choices': bedroom_choices, 15 | 'price_choices': price_choices 16 | } 17 | 18 | return render(request, 'pages/index.html', context) 19 | 20 | 21 | def about(request): 22 | # Get all realtors 23 | realtors = Realtor.objects.order_by('-hire_date') 24 | 25 | # Get MVP 26 | mvp_realtors = Realtor.objects.all().filter(is_mvp=True) 27 | 28 | context = { 29 | 'realtors': realtors, 30 | 'mvp_realtors': mvp_realtors 31 | } 32 | 33 | return render(request, 'pages/about.html', context) -------------------------------------------------------------------------------- /realestate/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/__init__.py -------------------------------------------------------------------------------- /realestate/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /realestate/__pycache__/settings.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/__pycache__/settings.cpython-37.pyc -------------------------------------------------------------------------------- /realestate/__pycache__/urls.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/__pycache__/urls.cpython-37.pyc -------------------------------------------------------------------------------- /realestate/__pycache__/wsgi.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/__pycache__/wsgi.cpython-37.pyc -------------------------------------------------------------------------------- /realestate/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for realestate project. 3 | 4 | Generated by 'django-admin startproject' using Django 2.1.4. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.1/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/2.1/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'w6rm%l&xim0ivll-li$u6fg8)6k8-$7uar^f#33ht5sutw8e!#' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'pages.apps.PagesConfig', 35 | 'listings.apps.ListingsConfig', 36 | 'realtors.apps.RealtorsConfig', 37 | 'accounts.apps.AccountsConfig', 38 | 'contacts.apps.ContactsConfig', 39 | 'django.contrib.admin', 40 | 'django.contrib.auth', 41 | 'django.contrib.contenttypes', 42 | 'django.contrib.sessions', 43 | 'django.contrib.messages', 44 | 'django.contrib.staticfiles', 45 | 'django.contrib.humanize', 46 | ] 47 | 48 | MIDDLEWARE = [ 49 | 'django.middleware.security.SecurityMiddleware', 50 | 'django.contrib.sessions.middleware.SessionMiddleware', 51 | 'django.middleware.common.CommonMiddleware', 52 | 'django.middleware.csrf.CsrfViewMiddleware', 53 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 54 | 'django.contrib.messages.middleware.MessageMiddleware', 55 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 56 | ] 57 | 58 | ROOT_URLCONF = 'realestate.urls' 59 | 60 | TEMPLATES = [ 61 | { 62 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 63 | 'DIRS': [os.path.join(BASE_DIR,'templates')], 64 | 'APP_DIRS': True, 65 | 'OPTIONS': { 66 | 'context_processors': [ 67 | 'django.template.context_processors.debug', 68 | 'django.template.context_processors.request', 69 | 'django.contrib.auth.context_processors.auth', 70 | 'django.contrib.messages.context_processors.messages', 71 | ], 72 | }, 73 | }, 74 | ] 75 | 76 | WSGI_APPLICATION = 'realestate.wsgi.application' 77 | 78 | 79 | # Database 80 | # https://docs.djangoproject.com/en/2.1/ref/settings/#databases 81 | 82 | DATABASES = { 83 | 'default': { 84 | 'ENGINE': 'django.db.backends.postgresql', 85 | 'NAME': 'real_estate' , 86 | 'USER': 'pks', 87 | 'PASSWORD': 'abc123!', 88 | 'HOST':'localhost', 89 | 90 | } 91 | } 92 | 93 | 94 | # Password validation 95 | # https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators 96 | 97 | AUTH_PASSWORD_VALIDATORS = [ 98 | { 99 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 100 | }, 101 | { 102 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 103 | }, 104 | { 105 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 106 | }, 107 | { 108 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 109 | }, 110 | ] 111 | 112 | 113 | # Internationalization 114 | # https://docs.djangoproject.com/en/2.1/topics/i18n/ 115 | 116 | LANGUAGE_CODE = 'en-us' 117 | 118 | TIME_ZONE = 'UTC' 119 | 120 | USE_I18N = True 121 | 122 | USE_L10N = True 123 | 124 | USE_TZ = True 125 | 126 | 127 | # Static files (CSS, JavaScript, Images) 128 | # https://docs.djangoproject.com/en/2.1/howto/static-files/ 129 | STATIC_ROOT = os.path.join(BASE_DIR,'static') 130 | STATIC_URL = '/static/' 131 | STATICFILES_DIRS = [ 132 | os.path.join(BASE_DIR,'realestate/static') 133 | ] 134 | 135 | # Media Folder Settings 136 | MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 137 | MEDIA_URL = '/media/' 138 | 139 | 140 | # Messages 141 | from django.contrib.messages import constants as messages 142 | MESSAGE_TAGS = { 143 | messages.ERROR: 'danger' 144 | } 145 | -------------------------------------------------------------------------------- /realestate/static/css/admin.css: -------------------------------------------------------------------------------- 1 | #header { 2 | height: 50px; 3 | background: #10284e; 4 | color: #fff; 5 | } 6 | 7 | #branding h1 { 8 | color: #fff; 9 | } 10 | 11 | a:link, 12 | a:visited { 13 | color:#10284e; 14 | } 15 | 16 | div.breadcrumbs { 17 | background: #30caa0; 18 | color: #10284e; 19 | } 20 | 21 | div.breadcrumbs a { 22 | color: #333; 23 | } 24 | 25 | .module h2, .module caption, .inline-group h2 { 26 | background: #30caa0; 27 | } 28 | 29 | .button, input[type=submit], input[type=button], .submit-row input, a.button { 30 | background: #10284e; 31 | color: #fff; 32 | } -------------------------------------------------------------------------------- /realestate/static/css/lightbox.min.css: -------------------------------------------------------------------------------- 1 | .lb-loader, 2 | .lightbox { 3 | text-align: center; 4 | line-height: 0; 5 | } 6 | .lb-dataContainer:after, 7 | .lb-outerContainer:after { 8 | content: ''; 9 | clear: both; 10 | } 11 | html.lb-disable-scrolling { 12 | overflow: hidden; 13 | position: fixed; 14 | height: 100vh; 15 | width: 100vw; 16 | } 17 | .lightboxOverlay { 18 | position: absolute; 19 | top: 0; 20 | left: 0; 21 | z-index: 9999; 22 | background-color: #000; 23 | filter: alpha(Opacity=80); 24 | opacity: 0.8; 25 | display: none; 26 | } 27 | .lightbox { 28 | position: absolute; 29 | left: 0; 30 | width: 100%; 31 | z-index: 10000; 32 | font-weight: 400; 33 | } 34 | .lightbox .lb-image { 35 | display: block; 36 | height: auto; 37 | max-width: inherit; 38 | max-height: none; 39 | border-radius: 3px; 40 | border: 4px solid #fff; 41 | } 42 | .lightbox a img { 43 | border: none; 44 | } 45 | .lb-outerContainer { 46 | position: relative; 47 | width: 250px; 48 | height: 250px; 49 | margin: 0 auto; 50 | border-radius: 4px; 51 | background-color: #fff; 52 | } 53 | .lb-loader, 54 | .lb-nav { 55 | position: absolute; 56 | left: 0; 57 | } 58 | .lb-outerContainer:after { 59 | display: table; 60 | } 61 | .lb-loader { 62 | top: 43%; 63 | height: 25%; 64 | width: 100%; 65 | } 66 | .lb-cancel { 67 | display: block; 68 | width: 32px; 69 | height: 32px; 70 | margin: 0 auto; 71 | background: url(../images/loading.gif) no-repeat; 72 | } 73 | .lb-nav { 74 | top: 0; 75 | height: 100%; 76 | width: 100%; 77 | z-index: 10; 78 | } 79 | .lb-container > .nav { 80 | left: 0; 81 | } 82 | .lb-nav a { 83 | outline: 0; 84 | background-image: url(data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); 85 | } 86 | .lb-next, 87 | .lb-prev { 88 | height: 100%; 89 | cursor: pointer; 90 | display: block; 91 | } 92 | .lb-nav a.lb-prev { 93 | width: 34%; 94 | left: 0; 95 | float: left; 96 | background: url(../img/lightbox/prev.png) left 48% no-repeat; 97 | filter: alpha(Opacity=0); 98 | opacity: 0; 99 | -webkit-transition: opacity 0.6s; 100 | -moz-transition: opacity 0.6s; 101 | -o-transition: opacity 0.6s; 102 | transition: opacity 0.6s; 103 | } 104 | .lb-nav a.lb-prev:hover { 105 | filter: alpha(Opacity=100); 106 | opacity: 1; 107 | } 108 | .lb-nav a.lb-next { 109 | width: 64%; 110 | right: 0; 111 | float: right; 112 | background: url(../img/lightbox/next.png) right 48% no-repeat; 113 | filter: alpha(Opacity=0); 114 | opacity: 0; 115 | -webkit-transition: opacity 0.6s; 116 | -moz-transition: opacity 0.6s; 117 | -o-transition: opacity 0.6s; 118 | transition: opacity 0.6s; 119 | } 120 | .lb-nav a.lb-next:hover { 121 | filter: alpha(Opacity=100); 122 | opacity: 1; 123 | } 124 | .lb-dataContainer { 125 | margin: 0 auto; 126 | padding-top: 5px; 127 | width: 100%; 128 | border-bottom-left-radius: 4px; 129 | border-bottom-right-radius: 4px; 130 | } 131 | .lb-dataContainer:after { 132 | display: table; 133 | } 134 | .lb-data { 135 | padding: 0 4px; 136 | color: #ccc; 137 | } 138 | .lb-data .lb-details { 139 | width: 85%; 140 | float: left; 141 | text-align: left; 142 | line-height: 1.1em; 143 | } 144 | .lb-data .lb-caption { 145 | font-size: 13px; 146 | font-weight: 700; 147 | line-height: 1em; 148 | } 149 | .lb-data .lb-caption a { 150 | color: #4ae; 151 | } 152 | .lb-data .lb-number { 153 | display: block; 154 | clear: left; 155 | padding-bottom: 1em; 156 | font-size: 12px; 157 | color: #999; 158 | } 159 | .lb-data .lb-close { 160 | display: block; 161 | float: right; 162 | width: 30px; 163 | height: 30px; 164 | background: url(../img/lightbox/close.png) top right no-repeat; 165 | text-align: right; 166 | outline: 0; 167 | filter: alpha(Opacity=70); 168 | opacity: 0.7; 169 | -webkit-transition: opacity 0.2s; 170 | -moz-transition: opacity 0.2s; 171 | -o-transition: opacity 0.2s; 172 | transition: opacity 0.2s; 173 | } 174 | .lb-data .lb-close:hover { 175 | cursor: pointer; 176 | filter: alpha(Opacity=100); 177 | opacity: 1; 178 | } 179 | -------------------------------------------------------------------------------- /realestate/static/css/style.css: -------------------------------------------------------------------------------- 1 | .btn-secondary { 2 | color: #fff !important; } 3 | 4 | img { 5 | width: 100%; } 6 | 7 | .logo { 8 | width: 80px; } 9 | 10 | .navbar { 11 | opacity: 0.9; 12 | text-transform: uppercase; } 13 | 14 | .social a { 15 | margin-right: 0.4rem; } 16 | 17 | #showcase { 18 | background: url(../img/showcase.jpg) no-repeat top center fixed/cover; 19 | position: relative; 20 | min-height: 650px; 21 | color: #fff; 22 | padding-top: 6rem; } 23 | #showcase .home-search { 24 | min-height: 400px; 25 | position: relative; 26 | border-radius: 5px; } 27 | #showcase .overlay { 28 | content: ''; 29 | position: absolute; 30 | top: 0; 31 | left: 0; 32 | min-height: 400px; 33 | width: 100%; 34 | background: rgba(51, 51, 51, 0.8); } 35 | 36 | #services { 37 | background: url(../img/building.jpg) no-repeat top center fixed/cover; 38 | min-height: 300px; 39 | position: relative; 40 | overflow: hidden; } 41 | #services::before { 42 | content: ''; 43 | position: absolute; 44 | top: 0; 45 | left: 0; 46 | min-height: 100%; 47 | width: 100%; 48 | background: rgba(32, 134, 107, 0.8); } 49 | 50 | #showcase-inner { 51 | background: url(../img/building.jpg) no-repeat top center fixed/cover; 52 | position: relative; 53 | overflow: hidden; 54 | min-height: 200px; } 55 | #showcase-inner::before { 56 | content: ''; 57 | position: absolute; 58 | top: 0; 59 | left: 0; 60 | min-height: 100%; 61 | width: 100%; 62 | background: rgba(32, 134, 107, 0.8); } 63 | #showcase-inner.showcase-search { 64 | min-height: 270px; } 65 | 66 | #work { 67 | padding: 6rem 0; } 68 | 69 | .listing-preview a { 70 | position: relative; } 71 | 72 | @media (max-width: 991px) { 73 | #showcase { 74 | padding-top: 4rem; } 75 | #showcase h1 { 76 | font-size: 40px; } 77 | .hide-md-down { 78 | display: none; } } 79 | 80 | @media (max-width: 768px) { 81 | #showcase { 82 | padding-top: 3rem; } 83 | #showcase h1 { 84 | font-size: 40px; } 85 | #showcase p { 86 | display: none; } 87 | #top-bar { 88 | text-align: center; } 89 | #top-bar .social { 90 | text-align: center !important; } } 91 | 92 | @media (max-width: 576px) { 93 | #showcase h1 { 94 | font-size: 30px; } 95 | #showcase-inner h1 { 96 | font-size: 40px; } } 97 | -------------------------------------------------------------------------------- /realestate/static/img/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/.DS_Store -------------------------------------------------------------------------------- /realestate/static/img/about.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/about.jpg -------------------------------------------------------------------------------- /realestate/static/img/building.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/building.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-1.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-2.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-3.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-4.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-5.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-6.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-inside-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-inside-1.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-inside-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-inside-2.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-inside-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-inside-3.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-inside-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-inside-4.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-inside-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-inside-5.jpg -------------------------------------------------------------------------------- /realestate/static/img/homes/home-inside-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/homes/home-inside-6.jpg -------------------------------------------------------------------------------- /realestate/static/img/lightbox/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/lightbox/close.png -------------------------------------------------------------------------------- /realestate/static/img/lightbox/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/lightbox/loading.gif -------------------------------------------------------------------------------- /realestate/static/img/lightbox/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/lightbox/next.png -------------------------------------------------------------------------------- /realestate/static/img/lightbox/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/lightbox/prev.png -------------------------------------------------------------------------------- /realestate/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/logo.png -------------------------------------------------------------------------------- /realestate/static/img/realtors/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/realtors/.DS_Store -------------------------------------------------------------------------------- /realestate/static/img/realtors/jenny.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/realtors/jenny.jpg -------------------------------------------------------------------------------- /realestate/static/img/realtors/kyle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/realtors/kyle.jpg -------------------------------------------------------------------------------- /realestate/static/img/realtors/mark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/realtors/mark.jpg -------------------------------------------------------------------------------- /realestate/static/img/showcase.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/img/showcase.jpg -------------------------------------------------------------------------------- /realestate/static/js/main.js: -------------------------------------------------------------------------------- 1 | const date = new Date(); 2 | document.querySelector('.year').innerHTML = date.getFullYear(); 3 | 4 | 5 | setTimeout(function() { 6 | $('#message').fadeOut('slow'); 7 | }, 3000) 8 | -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /realestate/static/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realestate/static/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /realestate/urls.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.urls import path, include 3 | from django.conf import settings 4 | from django.conf.urls.static import static 5 | 6 | urlpatterns = [ 7 | path('', include('pages.urls')), 8 | path('listings/', include('listings.urls')), 9 | path('accounts/', include('accounts.urls')), 10 | path('contacts/', include('contacts.urls')), 11 | path('admin/', admin.site.urls), 12 | ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) -------------------------------------------------------------------------------- /realestate/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for realestate project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'realestate.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /realtors/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realtors/__init__.py -------------------------------------------------------------------------------- /realtors/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realtors/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /realtors/__pycache__/admin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realtors/__pycache__/admin.cpython-37.pyc -------------------------------------------------------------------------------- /realtors/__pycache__/apps.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realtors/__pycache__/apps.cpython-37.pyc -------------------------------------------------------------------------------- /realtors/__pycache__/models.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realtors/__pycache__/models.cpython-37.pyc -------------------------------------------------------------------------------- /realtors/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Realtor 4 | 5 | class RealtorAdmin(admin.ModelAdmin): 6 | list_display = ('id', 'name', 'email', 'hire_date') 7 | list_display_links = ('id', 'name') 8 | search_fields = ('name',) 9 | list_per_page = 25 10 | 11 | admin.site.register(Realtor, RealtorAdmin) -------------------------------------------------------------------------------- /realtors/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class RealtorsConfig(AppConfig): 5 | name = 'realtors' 6 | -------------------------------------------------------------------------------- /realtors/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2018-12-18 15:11 2 | 3 | import datetime 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | initial = True 10 | 11 | dependencies = [ 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Realtor', 17 | fields=[ 18 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 19 | ('name', models.CharField(max_length=200)), 20 | ('photo', models.ImageField(upload_to='photos/%Y/%m/%d/')), 21 | ('description', models.TextField(blank=True)), 22 | ('phone', models.CharField(max_length=20)), 23 | ('email', models.CharField(max_length=50)), 24 | ('is_mvp', models.BooleanField(default=False)), 25 | ('hire_date', models.DateTimeField(blank=True, default=datetime.datetime.now)), 26 | ], 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /realtors/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realtors/migrations/__init__.py -------------------------------------------------------------------------------- /realtors/migrations/__pycache__/0001_initial.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realtors/migrations/__pycache__/0001_initial.cpython-37.pyc -------------------------------------------------------------------------------- /realtors/migrations/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/realtors/migrations/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /realtors/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from datetime import datetime 3 | 4 | class Realtor(models.Model): 5 | name = models.CharField(max_length=200) 6 | photo = models.ImageField(upload_to='photos/%Y/%m/%d/') 7 | description = models.TextField(blank=True) 8 | phone = models.CharField(max_length=20) 9 | email = models.CharField(max_length=50) 10 | is_mvp = models.BooleanField(default=False) 11 | hire_date = models.DateTimeField(default=datetime.now, blank=True) 12 | def __str__(self): 13 | return self.name -------------------------------------------------------------------------------- /realtors/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /realtors/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | asgiref==3.2.10 2 | Django==3.1.1 3 | gunicorn==20.0.4 4 | paytmchecksum==1.7.0 5 | Pillow==7.2.0 6 | pycryptodome==3.9.8 7 | pytz==2020.1 8 | sqlparse==0.3.1 9 | whitenoise==5.2.0 10 | -------------------------------------------------------------------------------- /screenshots/s1.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/screenshots/s1.JPG -------------------------------------------------------------------------------- /screenshots/s2about.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/screenshots/s2about.JPG -------------------------------------------------------------------------------- /screenshots/s3list.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/screenshots/s3list.JPG -------------------------------------------------------------------------------- /screenshots/s4reg.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/screenshots/s4reg.JPG -------------------------------------------------------------------------------- /screenshots/s5adm.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/screenshots/s5adm.JPG -------------------------------------------------------------------------------- /screenshots/s6r.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/screenshots/s6r.JPG -------------------------------------------------------------------------------- /static/admin/css/dashboard.css: -------------------------------------------------------------------------------- 1 | /* DASHBOARD */ 2 | 3 | .dashboard .module table th { 4 | width: 100%; 5 | } 6 | 7 | .dashboard .module table td { 8 | white-space: nowrap; 9 | } 10 | 11 | .dashboard .module table td a { 12 | display: block; 13 | padding-right: .6em; 14 | } 15 | 16 | /* RECENT ACTIONS MODULE */ 17 | 18 | .module ul.actionlist { 19 | margin-left: 0; 20 | } 21 | 22 | ul.actionlist li { 23 | list-style-type: none; 24 | overflow: hidden; 25 | text-overflow: ellipsis; 26 | -o-text-overflow: ellipsis; 27 | } 28 | -------------------------------------------------------------------------------- /static/admin/css/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Roboto'; 3 | src: url('../fonts/Roboto-Bold-webfont.woff'); 4 | font-weight: 700; 5 | font-style: normal; 6 | } 7 | 8 | @font-face { 9 | font-family: 'Roboto'; 10 | src: url('../fonts/Roboto-Regular-webfont.woff'); 11 | font-weight: 400; 12 | font-style: normal; 13 | } 14 | 15 | @font-face { 16 | font-family: 'Roboto'; 17 | src: url('../fonts/Roboto-Light-webfont.woff'); 18 | font-weight: 300; 19 | font-style: normal; 20 | } 21 | -------------------------------------------------------------------------------- /static/admin/css/login.css: -------------------------------------------------------------------------------- 1 | /* LOGIN FORM */ 2 | 3 | body.login { 4 | background: #f8f8f8; 5 | } 6 | 7 | .login #header { 8 | height: auto; 9 | padding: 5px 16px; 10 | } 11 | 12 | .login #header h1 { 13 | font-size: 18px; 14 | } 15 | 16 | .login #header h1 a { 17 | color: #fff; 18 | } 19 | 20 | .login #content { 21 | padding: 20px 20px 0; 22 | } 23 | 24 | .login #container { 25 | background: #fff; 26 | border: 1px solid #eaeaea; 27 | border-radius: 4px; 28 | overflow: hidden; 29 | width: 28em; 30 | min-width: 300px; 31 | margin: 100px auto; 32 | } 33 | 34 | .login #content-main { 35 | width: 100%; 36 | } 37 | 38 | .login .form-row { 39 | padding: 4px 0; 40 | float: left; 41 | width: 100%; 42 | border-bottom: none; 43 | } 44 | 45 | .login .form-row label { 46 | padding-right: 0.5em; 47 | line-height: 2em; 48 | font-size: 1em; 49 | clear: both; 50 | color: #333; 51 | } 52 | 53 | .login .form-row #id_username, .login .form-row #id_password { 54 | clear: both; 55 | padding: 8px; 56 | width: 100%; 57 | -webkit-box-sizing: border-box; 58 | -moz-box-sizing: border-box; 59 | box-sizing: border-box; 60 | } 61 | 62 | .login span.help { 63 | font-size: 10px; 64 | display: block; 65 | } 66 | 67 | .login .submit-row { 68 | clear: both; 69 | padding: 1em 0 0 9.4em; 70 | margin: 0; 71 | border: none; 72 | background: none; 73 | text-align: left; 74 | } 75 | 76 | .login .password-reset-link { 77 | text-align: center; 78 | } 79 | -------------------------------------------------------------------------------- /static/admin/css/responsive_rtl.css: -------------------------------------------------------------------------------- 1 | /* TABLETS */ 2 | 3 | @media (max-width: 1024px) { 4 | [dir="rtl"] .colMS { 5 | margin-right: 0; 6 | } 7 | 8 | [dir="rtl"] #user-tools { 9 | text-align: right; 10 | } 11 | 12 | [dir="rtl"] #changelist .actions label { 13 | padding-left: 10px; 14 | padding-right: 0; 15 | } 16 | 17 | [dir="rtl"] #changelist .actions select { 18 | margin-left: 0; 19 | margin-right: 15px; 20 | } 21 | 22 | [dir="rtl"] .change-list .filtered .results, 23 | [dir="rtl"] .change-list .filtered .paginator, 24 | [dir="rtl"] .filtered #toolbar, 25 | [dir="rtl"] .filtered div.xfull, 26 | [dir="rtl"] .filtered .actions { 27 | margin-right: 0; 28 | margin-left: 230px; 29 | } 30 | 31 | [dir="rtl"] .inline-group ul.tools a.add, 32 | [dir="rtl"] .inline-group div.add-row a, 33 | [dir="rtl"] .inline-group .tabular tr.add-row td a { 34 | padding: 8px 26px 8px 10px; 35 | background-position: calc(100% - 8px) 9px; 36 | } 37 | 38 | [dir="rtl"] .related-widget-wrapper-link + .selector { 39 | margin-right: 0; 40 | margin-left: 15px; 41 | } 42 | 43 | [dir="rtl"] .selector .selector-filter label { 44 | margin-right: 0; 45 | margin-left: 8px; 46 | } 47 | 48 | [dir="rtl"] .object-tools li { 49 | float: right; 50 | } 51 | 52 | [dir="rtl"] .object-tools li + li { 53 | margin-left: 0; 54 | margin-right: 15px; 55 | } 56 | 57 | [dir="rtl"] .dashboard .module table td a { 58 | padding-left: 0; 59 | padding-right: 16px; 60 | } 61 | } 62 | 63 | /* MOBILE */ 64 | 65 | @media (max-width: 767px) { 66 | [dir="rtl"] .change-list .filtered .results, 67 | [dir="rtl"] .change-list .filtered .paginator, 68 | [dir="rtl"] .filtered #toolbar, 69 | [dir="rtl"] .filtered div.xfull, 70 | [dir="rtl"] .filtered .actions { 71 | margin-left: 0; 72 | } 73 | 74 | [dir="rtl"] .aligned .add-another, 75 | [dir="rtl"] .aligned .related-lookup, 76 | [dir="rtl"] .aligned .datetimeshortcuts { 77 | margin-left: 0; 78 | margin-right: 15px; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /static/admin/css/vendor/select2/LICENSE-SELECT2.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012-2015 Kevin Brown, Igor Vaynberg, and Select2 contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /static/admin/fonts/README.txt: -------------------------------------------------------------------------------- 1 | Roboto webfont source: https://www.google.com/fonts/specimen/Roboto 2 | Weights used in this project: Light (300), Regular (400), Bold (700) 3 | -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/admin/fonts/Roboto-Bold-webfont.woff -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/admin/fonts/Roboto-Light-webfont.woff -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/admin/fonts/Roboto-Regular-webfont.woff -------------------------------------------------------------------------------- /static/admin/img/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Code Charm Ltd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /static/admin/img/README.txt: -------------------------------------------------------------------------------- 1 | All icons are taken from Font Awesome (http://fontawesome.io/) project. 2 | The Font Awesome font is licensed under the SIL OFL 1.1: 3 | - https://scripts.sil.org/OFL 4 | 5 | SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG 6 | Font-Awesome-SVG-PNG is licensed under the MIT license (see file license 7 | in current folder). 8 | -------------------------------------------------------------------------------- /static/admin/img/calendar-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /static/admin/img/gis/move_vertex_off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/admin/img/gis/move_vertex_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/admin/img/icon-addlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-alert.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/admin/img/icon-changelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-clock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/admin/img/icon-deletelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-unknown-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-unknown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-viewlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-yes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/inline-delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/selector-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /static/admin/img/sorting-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /static/admin/img/tooltag-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/tooltag-arrowright.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/js/actions.min.js: -------------------------------------------------------------------------------- 1 | (function(a){var f;a.fn.actions=function(e){var b=a.extend({},a.fn.actions.defaults,e),g=a(this),k=!1,l=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},n=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},p=function(){n(); 2 | a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},q=function(c){c?l():n();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length,d=a(".action-counter").data("actionsIcnt");a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:d},!0));a(b.allToggle).prop("checked",function(){if(c===g.length){var a=!0;l()}else a=!1,p();return a})};a(b.counterContainer).show(); 3 | a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass);h();1===a(b.acrossInput).val()&&m()});a(b.allToggle).show().on("click",function(){q(a(this).prop("checked"));h()});a("a",b.acrossQuestions).on("click",function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("a",b.acrossClears).on("click",function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);p();q(0);h()});f=null;a(g).on("click",function(c){c||(c=window.event);var d=c.target?c.target: 4 | c.srcElement;if(f&&a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").on("change","td:gt(0) :input",function(){k=!0}); 5 | a('form#changelist-form button[name="index"]').on("click",function(a){if(k)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').on("click",function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return k?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")): 6 | confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"};a(document).ready(function(){var e= 7 | a("tr input.action-select");0' + gettext("Show") + 11 | ')'); 12 | } 13 | }); 14 | // Add toggle to anchor tag 15 | $("fieldset.collapse a.collapse-toggle").on('click', function(ev) { 16 | if ($(this).closest("fieldset").hasClass("collapsed")) { 17 | // Show 18 | $(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [$(this).attr("id")]); 19 | } else { 20 | // Hide 21 | $(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", [$(this).attr("id")]); 22 | } 23 | return false; 24 | }); 25 | }); 26 | })(django.jQuery); 27 | -------------------------------------------------------------------------------- /static/admin/js/collapse.min.js: -------------------------------------------------------------------------------- 1 | var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e'+gettext("Show")+")")});a("fieldset.collapse a.collapse-toggle").on("click",function(c){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]): 5 | a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset",[a(this).attr("id")]);return!1})})})(django.jQuery); 6 | -------------------------------------------------------------------------------- /static/admin/js/jquery.init.js: -------------------------------------------------------------------------------- 1 | /*global django:true, jQuery:false*/ 2 | /* Puts the included jQuery into our own namespace using noConflict and passing 3 | * it 'true'. This ensures that the included jQuery doesn't pollute the global 4 | * namespace (i.e. this preserves pre-existing values for both window.$ and 5 | * window.jQuery). 6 | */ 7 | var django = django || {}; 8 | django.jQuery = jQuery.noConflict(true); 9 | -------------------------------------------------------------------------------- /static/admin/js/popup_response.js: -------------------------------------------------------------------------------- 1 | /*global opener */ 2 | (function() { 3 | 'use strict'; 4 | var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); 5 | switch(initData.action) { 6 | case 'change': 7 | opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); 8 | break; 9 | case 'delete': 10 | opener.dismissDeleteRelatedObjectPopup(window, initData.value); 11 | break; 12 | default: 13 | opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); 14 | break; 15 | } 16 | })(); 17 | -------------------------------------------------------------------------------- /static/admin/js/prepopulate.js: -------------------------------------------------------------------------------- 1 | /*global URLify*/ 2 | (function($) { 3 | 'use strict'; 4 | $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { 5 | /* 6 | Depends on urlify.js 7 | Populates a selected field with the values of the dependent fields, 8 | URLifies and shortens the string. 9 | dependencies - array of dependent fields ids 10 | maxLength - maximum length of the URLify'd string 11 | allowUnicode - Unicode support of the URLify'd string 12 | */ 13 | return this.each(function() { 14 | var prepopulatedField = $(this); 15 | 16 | var populate = function() { 17 | // Bail if the field's value has been changed by the user 18 | if (prepopulatedField.data('_changed')) { 19 | return; 20 | } 21 | 22 | var values = []; 23 | $.each(dependencies, function(i, field) { 24 | field = $(field); 25 | if (field.val().length > 0) { 26 | values.push(field.val()); 27 | } 28 | }); 29 | prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); 30 | }; 31 | 32 | prepopulatedField.data('_changed', false); 33 | prepopulatedField.on('change', function() { 34 | prepopulatedField.data('_changed', true); 35 | }); 36 | 37 | if (!prepopulatedField.val()) { 38 | $(dependencies.join(',')).on('keyup change focus', populate); 39 | } 40 | }); 41 | }; 42 | })(django.jQuery); 43 | -------------------------------------------------------------------------------- /static/admin/js/prepopulate.min.js: -------------------------------------------------------------------------------- 1 | (function(b){b.fn.prepopulate=function(d,f,g){return this.each(function(){var a=b(this),h=function(){if(!a.data("_changed")){var e=[];b.each(d,function(a,c){c=b(c);01&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/ca.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/cs.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/da.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/de.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/el.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/en.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/es.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/et.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/eu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/fa.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها می‌توانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/fi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/fr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/gl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/he.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/hi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/hr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/hu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/id.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/is.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/it.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/ja.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/km.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/ko.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/lt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/lv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/mk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/ms.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/nb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/nl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/pl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/pt-BR.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/pt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/ro.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/ru.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/sk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/sr-Cyrl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/sr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/sv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/th.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/tr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/uk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/vi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/zh-CN.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/select2/i18n/zh-TW.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/admin/js/vendor/xregexp/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2007-2012 Steven Levithan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /static/css/lightbox.min.css: -------------------------------------------------------------------------------- 1 | .lb-loader, 2 | .lightbox { 3 | text-align: center; 4 | line-height: 0; 5 | } 6 | .lb-dataContainer:after, 7 | .lb-outerContainer:after { 8 | content: ''; 9 | clear: both; 10 | } 11 | html.lb-disable-scrolling { 12 | overflow: hidden; 13 | position: fixed; 14 | height: 100vh; 15 | width: 100vw; 16 | } 17 | .lightboxOverlay { 18 | position: absolute; 19 | top: 0; 20 | left: 0; 21 | z-index: 9999; 22 | background-color: #000; 23 | filter: alpha(Opacity=80); 24 | opacity: 0.8; 25 | display: none; 26 | } 27 | .lightbox { 28 | position: absolute; 29 | left: 0; 30 | width: 100%; 31 | z-index: 10000; 32 | font-weight: 400; 33 | } 34 | .lightbox .lb-image { 35 | display: block; 36 | height: auto; 37 | max-width: inherit; 38 | max-height: none; 39 | border-radius: 3px; 40 | border: 4px solid #fff; 41 | } 42 | .lightbox a img { 43 | border: none; 44 | } 45 | .lb-outerContainer { 46 | position: relative; 47 | width: 250px; 48 | height: 250px; 49 | margin: 0 auto; 50 | border-radius: 4px; 51 | background-color: #fff; 52 | } 53 | .lb-loader, 54 | .lb-nav { 55 | position: absolute; 56 | left: 0; 57 | } 58 | .lb-outerContainer:after { 59 | display: table; 60 | } 61 | .lb-loader { 62 | top: 43%; 63 | height: 25%; 64 | width: 100%; 65 | } 66 | .lb-cancel { 67 | display: block; 68 | width: 32px; 69 | height: 32px; 70 | margin: 0 auto; 71 | background: url(../images/loading.gif) no-repeat; 72 | } 73 | .lb-nav { 74 | top: 0; 75 | height: 100%; 76 | width: 100%; 77 | z-index: 10; 78 | } 79 | .lb-container > .nav { 80 | left: 0; 81 | } 82 | .lb-nav a { 83 | outline: 0; 84 | background-image: url(data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); 85 | } 86 | .lb-next, 87 | .lb-prev { 88 | height: 100%; 89 | cursor: pointer; 90 | display: block; 91 | } 92 | .lb-nav a.lb-prev { 93 | width: 34%; 94 | left: 0; 95 | float: left; 96 | background: url(../img/lightbox/prev.png) left 48% no-repeat; 97 | filter: alpha(Opacity=0); 98 | opacity: 0; 99 | -webkit-transition: opacity 0.6s; 100 | -moz-transition: opacity 0.6s; 101 | -o-transition: opacity 0.6s; 102 | transition: opacity 0.6s; 103 | } 104 | .lb-nav a.lb-prev:hover { 105 | filter: alpha(Opacity=100); 106 | opacity: 1; 107 | } 108 | .lb-nav a.lb-next { 109 | width: 64%; 110 | right: 0; 111 | float: right; 112 | background: url(../img/lightbox/next.png) right 48% no-repeat; 113 | filter: alpha(Opacity=0); 114 | opacity: 0; 115 | -webkit-transition: opacity 0.6s; 116 | -moz-transition: opacity 0.6s; 117 | -o-transition: opacity 0.6s; 118 | transition: opacity 0.6s; 119 | } 120 | .lb-nav a.lb-next:hover { 121 | filter: alpha(Opacity=100); 122 | opacity: 1; 123 | } 124 | .lb-dataContainer { 125 | margin: 0 auto; 126 | padding-top: 5px; 127 | width: 100%; 128 | border-bottom-left-radius: 4px; 129 | border-bottom-right-radius: 4px; 130 | } 131 | .lb-dataContainer:after { 132 | display: table; 133 | } 134 | .lb-data { 135 | padding: 0 4px; 136 | color: #ccc; 137 | } 138 | .lb-data .lb-details { 139 | width: 85%; 140 | float: left; 141 | text-align: left; 142 | line-height: 1.1em; 143 | } 144 | .lb-data .lb-caption { 145 | font-size: 13px; 146 | font-weight: 700; 147 | line-height: 1em; 148 | } 149 | .lb-data .lb-caption a { 150 | color: #4ae; 151 | } 152 | .lb-data .lb-number { 153 | display: block; 154 | clear: left; 155 | padding-bottom: 1em; 156 | font-size: 12px; 157 | color: #999; 158 | } 159 | .lb-data .lb-close { 160 | display: block; 161 | float: right; 162 | width: 30px; 163 | height: 30px; 164 | background: url(../img/lightbox/close.png) top right no-repeat; 165 | text-align: right; 166 | outline: 0; 167 | filter: alpha(Opacity=70); 168 | opacity: 0.7; 169 | -webkit-transition: opacity 0.2s; 170 | -moz-transition: opacity 0.2s; 171 | -o-transition: opacity 0.2s; 172 | transition: opacity 0.2s; 173 | } 174 | .lb-data .lb-close:hover { 175 | cursor: pointer; 176 | filter: alpha(Opacity=100); 177 | opacity: 1; 178 | } 179 | -------------------------------------------------------------------------------- /static/css/style.css: -------------------------------------------------------------------------------- 1 | .btn-secondary { 2 | color: #fff !important; } 3 | 4 | img { 5 | width: 100%; } 6 | 7 | .logo { 8 | width: 80px; } 9 | 10 | .navbar { 11 | opacity: 0.9; 12 | text-transform: uppercase; } 13 | 14 | .social a { 15 | margin-right: 0.4rem; } 16 | 17 | #showcase { 18 | background: url(../img/showcase.jpg) no-repeat top center fixed/cover; 19 | position: relative; 20 | min-height: 650px; 21 | color: #fff; 22 | padding-top: 6rem; } 23 | #showcase .home-search { 24 | min-height: 400px; 25 | position: relative; 26 | border-radius: 5px; } 27 | #showcase .overlay { 28 | content: ''; 29 | position: absolute; 30 | top: 0; 31 | left: 0; 32 | min-height: 400px; 33 | width: 100%; 34 | background: rgba(51, 51, 51, 0.8); } 35 | 36 | #services { 37 | background: url(../img/building.jpg) no-repeat top center fixed/cover; 38 | min-height: 300px; 39 | position: relative; 40 | overflow: hidden; } 41 | #services::before { 42 | content: ''; 43 | position: absolute; 44 | top: 0; 45 | left: 0; 46 | min-height: 100%; 47 | width: 100%; 48 | background: rgba(32, 134, 107, 0.8); } 49 | 50 | #showcase-inner { 51 | background: url(../img/building.jpg) no-repeat top center fixed/cover; 52 | position: relative; 53 | overflow: hidden; 54 | min-height: 200px; } 55 | #showcase-inner::before { 56 | content: ''; 57 | position: absolute; 58 | top: 0; 59 | left: 0; 60 | min-height: 100%; 61 | width: 100%; 62 | background: rgba(32, 134, 107, 0.8); } 63 | #showcase-inner.showcase-search { 64 | min-height: 270px; } 65 | 66 | #work { 67 | padding: 6rem 0; } 68 | 69 | .listing-preview a { 70 | position: relative; } 71 | 72 | @media (max-width: 991px) { 73 | #showcase { 74 | padding-top: 4rem; } 75 | #showcase h1 { 76 | font-size: 40px; } 77 | .hide-md-down { 78 | display: none; } } 79 | 80 | @media (max-width: 768px) { 81 | #showcase { 82 | padding-top: 3rem; } 83 | #showcase h1 { 84 | font-size: 40px; } 85 | #showcase p { 86 | display: none; } 87 | #top-bar { 88 | text-align: center; } 89 | #top-bar .social { 90 | text-align: center !important; } } 91 | 92 | @media (max-width: 576px) { 93 | #showcase h1 { 94 | font-size: 30px; } 95 | #showcase-inner h1 { 96 | font-size: 40px; } } 97 | -------------------------------------------------------------------------------- /static/img/about.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/about.jpg -------------------------------------------------------------------------------- /static/img/building.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/building.jpg -------------------------------------------------------------------------------- /static/img/homes/home-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-1.jpg -------------------------------------------------------------------------------- /static/img/homes/home-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-2.jpg -------------------------------------------------------------------------------- /static/img/homes/home-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-3.jpg -------------------------------------------------------------------------------- /static/img/homes/home-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-4.jpg -------------------------------------------------------------------------------- /static/img/homes/home-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-5.jpg -------------------------------------------------------------------------------- /static/img/homes/home-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-6.jpg -------------------------------------------------------------------------------- /static/img/homes/home-inside-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-inside-1.jpg -------------------------------------------------------------------------------- /static/img/homes/home-inside-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-inside-2.jpg -------------------------------------------------------------------------------- /static/img/homes/home-inside-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-inside-3.jpg -------------------------------------------------------------------------------- /static/img/homes/home-inside-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-inside-4.jpg -------------------------------------------------------------------------------- /static/img/homes/home-inside-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-inside-5.jpg -------------------------------------------------------------------------------- /static/img/homes/home-inside-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/homes/home-inside-6.jpg -------------------------------------------------------------------------------- /static/img/lightbox/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/lightbox/close.png -------------------------------------------------------------------------------- /static/img/lightbox/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/lightbox/loading.gif -------------------------------------------------------------------------------- /static/img/lightbox/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/lightbox/next.png -------------------------------------------------------------------------------- /static/img/lightbox/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/lightbox/prev.png -------------------------------------------------------------------------------- /static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/logo.png -------------------------------------------------------------------------------- /static/img/realtors/jenny.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/realtors/jenny.jpg -------------------------------------------------------------------------------- /static/img/realtors/kyle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/realtors/kyle.jpg -------------------------------------------------------------------------------- /static/img/realtors/mark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/realtors/mark.jpg -------------------------------------------------------------------------------- /static/img/showcase.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/img/showcase.jpg -------------------------------------------------------------------------------- /static/js/main.js: -------------------------------------------------------------------------------- 1 | const date = new Date(); 2 | document.querySelector('.year').innerHTML = date.getFullYear(); 3 | -------------------------------------------------------------------------------- /static/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /static/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /static/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /static/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /static/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /static/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /static/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /static/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /static/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /static/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /static/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /static/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thecaffeinedev/Real-Estate-Django-Web-App/bc72e01635da21de7c88df4defda9dd1aabea776/static/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /templates/accounts/dashboard.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block title %} | User Dashboard {% endblock %} 4 | 5 | {% block content %} 6 |
7 |
8 |
9 |
10 |

User Dashboard

11 |

Manage your Real Estate account

12 |
13 |
14 |
15 |
16 | 17 | 18 |
19 |
20 | 29 |
30 |
31 | 32 | 33 | {% include 'partials/_alerts.html' %} 34 | 35 |
36 |
37 |
38 |
39 |

Welcome {{ user.first_name }}

40 | {% if contacts %} 41 |

Here are the property listings that you have inquired about

42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | {% for contact in contacts %} 52 | 53 | 54 | 55 | 58 | 59 | {% endfor %} 60 | 61 |
#Property
{{ contact.id }}{{ contact.listing }} 56 | View Listing 57 |
62 | {% else %} 63 |

You have not made any inquiries

64 | {% endif %} 65 |
66 |
67 |
68 |
69 | {% endblock %} -------------------------------------------------------------------------------- /templates/accounts/login.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block title %} | Account Login {% endblock %} 4 | 5 | {% block content %} 6 |
7 |
8 |
9 |
10 |
11 |
12 |

13 | Login

14 |
15 |
16 | 17 | {% include 'partials/_alerts.html' %} 18 |
19 | {% csrf_token %} 20 |
21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 |
29 | 30 | 31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {% endblock %} -------------------------------------------------------------------------------- /templates/accounts/register.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block title %} | Register Account {% endblock %} 4 | 5 | {% block content %} 6 |
7 |
8 |
9 |
10 |
11 |
12 |

13 | Register

14 |
15 |
16 | 17 | {% include 'partials/_alerts.html' %} 18 |
19 | {% csrf_token %} 20 |
21 | 22 | 23 |
24 |
25 | 26 | 27 |
28 |
29 | 30 | 31 |
32 |
33 | 34 | 35 |
36 |
37 | 38 | 39 |
40 |
41 | 42 | 43 |
44 | 45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | {% endblock %} -------------------------------------------------------------------------------- /templates/admin/base_site.html: -------------------------------------------------------------------------------- 1 | {% extends 'admin/base.html' %} 2 | {% load static %} 3 | 4 | {% block branding %} 5 |

6 | Real Estate Admin Area 7 |

8 | {% endblock %} 9 | {% block extrastyle %} 10 | 11 | {% endblock %} -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | Real Estate {% block title %}{% endblock %} 19 | 20 | 21 | 22 | 23 | {% include 'partials/_topbar.html' %} 24 | 25 | {% include 'partials/_navbar.html' %} 26 | 27 | {% block content %} {% endblock %} 28 | 29 | {% include 'partials/_footer.html' %} 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /templates/pages/about.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% load static %} 4 | 5 | {% block title %} | About Us {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 |
11 |
12 |

About Real Estate

13 |

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sunt, pariatur!

14 |
15 |
16 |
17 |
18 | 19 | 20 |
21 |
22 | 31 |
32 |
33 | 34 |
35 |
36 |
37 |
38 |

We Search For The Perfect Home

39 |

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sunt, pariatur!

40 | 41 |

Lorem ipsum dolor sit amet consectetur adipisicing elit. Perspiciatis esse officia repudiandae ad saepe ex, amet 42 | neque quod accusamus rem quia magnam magni dolorum facilis ullam minima perferendis? Exercitationem at quaerat 43 | commodi id libero eveniet harum perferendis laborum molestias quia.

44 |
45 |
46 | {% if mvp_realtors %} 47 | {% for realtor in mvp_realtors %} 48 |
49 | Seller of the month 50 |
51 |
Seller Of The Month
52 |
{{ realtor.name }}
53 |

{{ realtor.description }} 54 |

55 |
56 |
57 | {% endfor %} 58 | {% endif %} 59 |
60 |
61 |
62 |
63 | 64 | 65 |
66 |

We Work For You

67 |

Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem velit aperiam, unde aliquid at similique!

68 |
69 | View Our Featured Listings 70 |
71 | 72 | 73 |
74 |
75 |

Our Team

76 |
77 | {% if realtors %} 78 | {% for realtor in realtors %} 79 |
80 | 81 |

{{ realtor.name }}

82 |

83 | Realtor

84 |
85 |

86 | {{ realtor.phone }}

87 |

88 | {{ realtor.email }}

89 |
90 | {% endfor %} 91 | {% else %} 92 |
93 |

No Realtors Available

94 |
95 | {% endif %} 96 |
97 |
98 |
99 | 100 | {% endblock %} 101 | -------------------------------------------------------------------------------- /templates/partials/_alerts.html: -------------------------------------------------------------------------------- 1 | {% if messages %} 2 | {% for message in messages %} 3 |
4 | 15 |
16 | {% endfor %} 17 | {% endif %} -------------------------------------------------------------------------------- /templates/partials/_footer.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | Copyright © 4 | Real Estate 5 |
-------------------------------------------------------------------------------- /templates/partials/_navbar.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | -------------------------------------------------------------------------------- /templates/partials/_topbar.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |
6 | +91 1234567890 7 |
8 |
9 | contact@realestate.com 10 |
11 | 30 |
31 |
32 |
-------------------------------------------------------------------------------- /webapp_features.md: -------------------------------------------------------------------------------- 1 | ## Web App Features 2 | **FRONTEND PAGES** 3 | 4 | - [x] 5 | Home 6 | 7 | - [x] About 8 | - [x] Listings 9 | - [x] Single Listing 10 | - [x] Search 11 | - [x] Register 12 | - [x] Login 13 | - [x] Dashboard (Inquiries) 14 | 15 | **DESIGN SPECIFICATION** 16 | 17 | - [x] Use Any Logo (Frontend and admin) 18 | 19 | - [x] Branding colors – blue(#10284e) green(#30caa0) 20 | - [x] Mobile Friendly 21 | - [x] Social media icons & contact info 22 | - [x] Doesn’t have to be too fancy but must be clean 23 | 24 | **FUNCTIONALITY SPECS** 25 | 26 | - [x] Manage listings, realtors, contact inquiries and website users via admin 27 | 28 | - [x] Role based users (staff and non-staff) 29 | - [x] Display listings in app with pagination 30 | - [x] Ability to set listings to unpublished 31 | - [x] Search listings by keyword, city, state, bedrooms and price (Homepage & search page) 32 | - [x] List realtors on about page with “seller of the month” (Control via admin) 33 | - [x] Listing page should have fields listed below 34 | - [x] Listing page should have 5 images with lightbox 35 | - [x] Lightbox should scroll through images 36 | - [x] Listing page should have a form to submit inquiry for that property listing 37 | - [x] Form info should go to database and notify realtor(s) with an email 38 | - [x] Frontend register/login to track inquiries 39 | - [x] Both unregistered and registered users can submit form. If registered, can only submit one per listing 40 | 41 | **LISTING PAGE FIELDS** 42 | 43 | - [x] Title 44 | - [x] Address, city, state, zip 45 | - [x] Price 46 | - [x] Bedrooms 47 | - [x] Bathrooms 48 | - [x] Square Feet 49 | - [x] Lot Size 50 | - [x] Garage 51 | - [x] Listing Date 52 | - [x] Realtor – Name & Image 53 | - [x] Main image and 5 other images 54 | --------------------------------------------------------------------------------