├── .gitignore ├── LICENSE ├── README.md ├── SampleProject ├── __init__.py ├── asgi.py ├── settings.py ├── settings.sample.py ├── urls.py └── wsgi.py ├── assets ├── css │ ├── Magnific-Popup.css │ ├── animated.css │ ├── bootstrap-icons.css │ ├── bootstrap.css │ ├── bootstrap.rtl.css │ ├── color │ │ ├── blue.css │ │ ├── green.css │ │ ├── orange.css │ │ └── purple.css │ ├── override.css │ ├── owl.carousel.min.css │ ├── rtl.css │ └── style.css ├── fonts │ ├── Vazir-Bold-FD-WOL.eot │ ├── Vazir-Bold-FD-WOL.ttf │ ├── Vazir-Bold-FD-WOL.woff │ ├── Vazir-Bold-FD-WOL.woff2 │ ├── Vazir-FD-WOL.ttf │ ├── Vazir-FD-WOL.woff │ ├── Vazir-FD-WOL.woff2 │ ├── Vazir-Light-FD-WOL.eot │ ├── Vazir-Light-FD-WOL.ttf │ ├── Vazir-Light-FD-WOL.woff │ ├── Vazir-Light-FD-WOL.woff2 │ ├── Vazir-Medium-FD-WOL.eot │ ├── Vazir-Medium-FD-WOL.ttf │ ├── Vazir-Medium-FD-WOL.woff │ ├── Vazir-Medium-FD-WOL.woff2 │ ├── Vazir-Thin-FD-WOL.eot │ ├── Vazir-Thin-FD-WOL.ttf │ ├── Vazir-Thin-FD-WOL.woff │ ├── Vazir-Thin-FD-WOL.woff2 │ ├── Yekan.ttf │ ├── bootstrap-icons.woff │ └── bootstrap-icons.woff2 ├── img │ ├── Remote-team.gif │ ├── Thumbs.db │ ├── back-06.jpg │ ├── back.png │ ├── blog-01.png │ ├── blog-02.png │ ├── blog-03.png │ ├── blog-06.png │ ├── blog-9.png │ ├── bootstrapping.svg │ ├── charles-deluvio-0v_1TPz1uXw-unsplash(1).jpg │ ├── client-1.jpg │ ├── client-2.jpg │ ├── client-3.jpg │ ├── client-4.jpg │ ├── client-5.jpg │ ├── client-6.jpg │ ├── cm.png │ ├── colorful-letter-n-vector-20527143.png │ ├── cotation.png │ ├── count-p.jpg │ ├── dribble.svg │ ├── eitaa-icon.png │ ├── eitaa-icon2.png │ ├── error.png │ ├── facebook(1).svg │ ├── facebook.svg │ ├── favicon.ico │ ├── github(1).svg │ ├── github.svg │ ├── gmail.png │ ├── gmail.svg │ ├── hero-02.png │ ├── hero.png │ ├── house.svg │ ├── icon-user.png │ ├── instagram.svg │ ├── location-map.png │ ├── logo.png │ ├── map.png │ ├── mike-dorner-sf_1ZDA1YFw-unsplash(1).jpg │ ├── newsletter.svg │ ├── pexels-anna-shvets-5325842.jpg │ ├── pexels-anna-shvets-5325881.jpg │ ├── pexels-anna-tarazevich-7216927.jpg │ ├── pexels-ante-6717979.jpg │ ├── pexels-davide-de-giovanni-3961576.jpg │ ├── pexels-dibakar-roy-5563381.jpg │ ├── pexels-ketut-subiyanto-4546165.jpg │ ├── pexels-mika-borgia-1317712.jpg │ ├── pexels-monstera-6781228.jpg │ ├── pexels-vi-tran-4154627.jpg │ ├── phone(1).svg │ ├── placeholder.svg │ ├── play-button.png │ ├── pocket-watch.svg │ ├── portfolio-01.jpg │ ├── portfolio-02.jpg │ ├── portfolio-03.jpg │ ├── portfolio-04.jpg │ ├── portfolio-05.jpg │ ├── portfolio-06.jpg │ ├── portfolio-07.jpg │ ├── portfolio-08.jpg │ ├── portfolio-09.jpg │ ├── portfolio-10.jpg │ ├── portfolio-11.jpg │ ├── portfolio-12.jpg │ ├── portfolio-13.jpg │ ├── portfolio-14.jpg │ ├── post-01.png │ ├── preview │ │ ├── pre-02.png │ │ ├── pre-03.png │ │ ├── pre-04.png │ │ ├── pre-05.png │ │ ├── pre-06.png │ │ └── preview-01.png │ ├── services.png │ ├── skill-1.jpg │ ├── skill-img.png │ ├── soundcloud.svg │ ├── telephone.svg │ ├── twitch.svg │ ├── video-img.png │ ├── whatsapp.svg │ └── wicker-basket.svg └── js │ ├── bootstrap.js │ ├── custom.js │ ├── easypiechart.js │ ├── isotope.package.js │ ├── jquery-3.6.0.min.js │ ├── jquery-easing-min.js │ ├── jquery.countTo.js │ ├── jquery.magnific-popup.min.js │ ├── owl.carousel.min.js │ ├── typed.js │ └── wow.js ├── blog ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-310.pyc │ ├── admin.cpython-310.pyc │ ├── apps.cpython-310.pyc │ ├── models.cpython-310.pyc │ ├── urls.cpython-310.pyc │ └── views.cpython-310.pyc ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_alter_article_options_comment.py │ ├── 0003_alter_article_body.py │ ├── 0004_alter_article_options_alter_comment_options_and_more.py │ ├── 0005_alter_article_image.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-310.pyc │ │ ├── 0002_alter_article_options_comment.cpython-310.pyc │ │ ├── 0003_alter_article_body.cpython-310.pyc │ │ ├── 0004_alter_article_options_alter_comment_options_and_more.cpython-310.pyc │ │ ├── 0005_alter_article_image.cpython-310.pyc │ │ └── __init__.cpython-310.pyc ├── models.py ├── templates │ └── blog │ │ ├── all_articles.html │ │ └── article_details.html ├── tests.py ├── urls.py └── views.py ├── books ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-310.pyc │ ├── admin.cpython-310.pyc │ ├── apps.cpython-310.pyc │ ├── models.cpython-310.pyc │ ├── urls.cpython-310.pyc │ └── views.cpython-310.pyc ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_comment.py │ ├── 0003_alter_book_options_alter_comment_options_and_more.py │ ├── 0004_alter_book_image.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-310.pyc │ │ ├── 0002_comment.cpython-310.pyc │ │ ├── 0003_alter_book_options_alter_comment_options_and_more.cpython-310.pyc │ │ ├── 0004_alter_book_image.cpython-310.pyc │ │ └── __init__.cpython-310.pyc ├── models.py ├── templates │ └── books │ │ ├── all_books.html │ │ └── book_details.html ├── tests.py ├── urls.py └── views.py ├── context_processors ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-310.pyc │ └── context_processors.cpython-310.pyc └── context_processors.py ├── home ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-310.pyc │ ├── admin.cpython-310.pyc │ ├── apps.cpython-310.pyc │ ├── forms.cpython-310.pyc │ ├── models.cpython-310.pyc │ ├── urls.cpython-310.pyc │ └── views.cpython-310.pyc ├── admin.py ├── apps.py ├── forms.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_alter_aboutme_options_aboutme_name.py │ ├── 0003_alter_aboutme_name.py │ ├── 0004_rename_aboutme_foreword.py │ ├── 0005_aboutme_alter_foreword_options.py │ ├── 0006_countup_alter_aboutme_options_alter_foreword_options.py │ ├── 0007_target.py │ ├── 0008_bookslider.py │ ├── 0009_bookslider_image.py │ ├── 0010_alter_bookslider_image.py │ ├── 0011_rename_book_name_bookslider_name.py │ ├── 0012_culturalactivity_alter_bookslider_options.py │ ├── 0013_culturalactivity_image.py │ ├── 0014_alter_culturalactivity_options.py │ ├── 0015_delete_bookslider.py │ ├── 0016_video.py │ ├── 0017_alter_video_options.py │ ├── 0018_contactus.py │ ├── 0019_rename_title_contactus_name.py │ ├── 0020_social.py │ ├── 0021_alter_contactus_options_and_more.py │ ├── 0022_alter_aboutme_image_alter_culturalactivity_image_and_more.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-310.pyc │ │ ├── 0002_alter_aboutme_options_aboutme_name.cpython-310.pyc │ │ ├── 0003_alter_aboutme_name.cpython-310.pyc │ │ ├── 0004_rename_aboutme_foreword.cpython-310.pyc │ │ ├── 0005_aboutme_alter_foreword_options.cpython-310.pyc │ │ ├── 0006_countup_alter_aboutme_options_alter_foreword_options.cpython-310.pyc │ │ ├── 0007_target.cpython-310.pyc │ │ ├── 0008_bookslider.cpython-310.pyc │ │ ├── 0009_bookslider_image.cpython-310.pyc │ │ ├── 0010_alter_bookslider_image.cpython-310.pyc │ │ ├── 0011_rename_book_name_bookslider_name.cpython-310.pyc │ │ ├── 0012_culturalactivity_alter_bookslider_options.cpython-310.pyc │ │ ├── 0013_culturalactivity_image.cpython-310.pyc │ │ ├── 0014_alter_culturalactivity_options.cpython-310.pyc │ │ ├── 0015_delete_bookslider.cpython-310.pyc │ │ ├── 0016_video.cpython-310.pyc │ │ ├── 0017_alter_video_options.cpython-310.pyc │ │ ├── 0018_contactus.cpython-310.pyc │ │ ├── 0019_rename_title_contactus_name.cpython-310.pyc │ │ ├── 0020_social.cpython-310.pyc │ │ ├── 0021_alter_contactus_options_and_more.cpython-310.pyc │ │ ├── 0022_alter_aboutme_image_alter_culturalactivity_image_and_more.cpython-310.pyc │ │ └── __init__.cpython-310.pyc ├── models.py ├── templates │ └── home │ │ └── index.html ├── tests.py ├── urls.py └── views.py ├── manage.py ├── requirements.txt └── templates ├── admin └── base_site.html ├── base.html └── includes ├── footer.html ├── header_references.html ├── js_files.html └── loader.html /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/django 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=django 3 | 4 | ### Django ### 5 | *.log 6 | *.pot 7 | *.pyc 8 | __pycache__/ 9 | local_settings.py 10 | db.sqlite3 11 | db.sqlite3-journal 12 | media 13 | 14 | # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ 15 | # in your Git repository. Update and uncomment the following line accordingly. 16 | # /staticfiles/ 17 | 18 | ### Django.Python Stack ### 19 | # Byte-compiled / optimized / DLL files 20 | *.py[cod] 21 | *$py.class 22 | 23 | # C extensions 24 | *.so 25 | 26 | # Distribution / packaging 27 | .Python 28 | build/ 29 | develop-eggs/ 30 | dist/ 31 | downloads/ 32 | eggs/ 33 | .eggs/ 34 | lib/ 35 | lib64/ 36 | parts/ 37 | sdist/ 38 | var/ 39 | wheels/ 40 | share/python-wheels/ 41 | *.egg-info/ 42 | .installed.cfg 43 | *.egg 44 | MANIFEST 45 | 46 | # PyInstaller 47 | # Usually these files are written by a python script from a template 48 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 49 | *.manifest 50 | *.spec 51 | 52 | # Installer logs 53 | pip-log.txt 54 | pip-delete-this-directory.txt 55 | 56 | # Unit test / coverage reports 57 | htmlcov/ 58 | .tox/ 59 | .nox/ 60 | .coverage 61 | .coverage.* 62 | .cache 63 | nosetests.xml 64 | coverage.xml 65 | *.cover 66 | *.py,cover 67 | .hypothesis/ 68 | .pytest_cache/ 69 | cover/ 70 | 71 | # Translations 72 | *.mo 73 | 74 | # Django stuff: 75 | 76 | # Flask stuff: 77 | instance/ 78 | .webassets-cache 79 | 80 | # Scrapy stuff: 81 | .scrapy 82 | 83 | # Sphinx documentation 84 | docs/_build/ 85 | 86 | # PyBuilder 87 | .pybuilder/ 88 | target/ 89 | 90 | # Jupyter Notebook 91 | .ipynb_checkpoints 92 | 93 | # IPython 94 | profile_default/ 95 | ipython_config.py 96 | 97 | # pyenv 98 | # For a library or package, you might want to ignore these files since the code is 99 | # intended to run in multiple environments; otherwise, check them in: 100 | # .python-version 101 | 102 | # pipenv 103 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 104 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 105 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 106 | # install all needed dependencies. 107 | #Pipfile.lock 108 | 109 | # poetry 110 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 111 | # This is especially recommended for binary packages to ensure reproducibility, and is more 112 | # commonly ignored for libraries. 113 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 114 | #poetry.lock 115 | 116 | # pdm 117 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 118 | #pdm.lock 119 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 120 | # in version control. 121 | # https://pdm.fming.dev/#use-with-ide 122 | .pdm.toml 123 | 124 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 125 | __pypackages__/ 126 | 127 | # Celery stuff 128 | celerybeat-schedule 129 | celerybeat.pid 130 | 131 | # SageMath parsed files 132 | *.sage.py 133 | 134 | # Environments 135 | .env 136 | .venv 137 | env/ 138 | venv/ 139 | ENV/ 140 | env.bak/ 141 | venv.bak/ 142 | 143 | # Spyder project settings 144 | .spyderproject 145 | .spyproject 146 | 147 | # Rope project settings 148 | .ropeproject 149 | 150 | # mkdocs documentation 151 | /site 152 | 153 | # mypy 154 | .mypy_cache/ 155 | .dmypy.json 156 | dmypy.json 157 | 158 | # Pyre type checker 159 | .pyre/ 160 | 161 | # pytype static type analyzer 162 | .pytype/ 163 | 164 | # Cython debug symbols 165 | cython_debug/ 166 | 167 | # PyCharm 168 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 169 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 170 | # and can be added to the global gitignore or merged into this file. For a more nuclear 171 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 172 | .idea/ 173 | .idea 174 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 175 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 176 | 177 | # User-specific stuff 178 | .idea/**/workspace.xml 179 | .idea/**/tasks.xml 180 | .idea/**/usage.statistics.xml 181 | .idea/**/dictionaries 182 | .idea/**/shelf 183 | 184 | # AWS User-specific 185 | .idea/**/aws.xml 186 | 187 | # Generated files 188 | .idea/**/contentModel.xml 189 | 190 | # Sensitive or high-churn files 191 | .idea/**/dataSources/ 192 | .idea/**/dataSources.ids 193 | .idea/**/dataSources.local.xml 194 | .idea/**/sqlDataSources.xml 195 | .idea/**/dynamic.xml 196 | .idea/**/uiDesigner.xml 197 | .idea/**/dbnavigator.xml 198 | 199 | # Gradle 200 | .idea/**/gradle.xml 201 | .idea/**/libraries 202 | 203 | # Gradle and Maven with auto-import 204 | # When using Gradle or Maven with auto-import, you should exclude module files, 205 | # since they will be recreated, and may cause churn. Uncomment if using 206 | # auto-import. 207 | # .idea/artifacts 208 | # .idea/compiler.xml 209 | # .idea/jarRepositories.xml 210 | # .idea/modules.xml 211 | # .idea/*.iml 212 | # .idea/modules 213 | # *.iml 214 | # *.ipr 215 | 216 | # CMake 217 | cmake-build-*/ 218 | 219 | # Mongo Explorer plugin 220 | .idea/**/mongoSettings.xml 221 | 222 | # File-based project format 223 | *.iws 224 | 225 | # IntelliJ 226 | out/ 227 | 228 | # mpeltonen/sbt-idea plugin 229 | .idea_modules/ 230 | 231 | # JIRA plugin 232 | atlassian-ide-plugin.xml 233 | 234 | # Cursive Clojure plugin 235 | .idea/replstate.xml 236 | 237 | # SonarLint plugin 238 | .idea/sonarlint/ 239 | 240 | # Crashlytics plugin (for Android Studio and IntelliJ) 241 | com_crashlytics_export_strings.xml 242 | crashlytics.properties 243 | crashlytics-build.properties 244 | fabric.properties 245 | 246 | # Editor-based Rest Client 247 | .idea/httpRequests 248 | 249 | # Android studio 3.1+ serialized cache file 250 | .idea/caches/build_file_checksums.ser 251 | # End of https://www.toptal.com/developers/gitignore/api/django 252 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Morteza Shoeibi 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 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, 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SampleProject-django 2 | 3 | This is a django-project which includes multiple useful features that can be used for educational purposes and beginners. 4 | 5 | # Setup and run 6 | To run the project in development mode: 7 | 8 | - Install `git` and `python3` 9 | 10 | - Clone and cd to the project: 11 | ```bash 12 | git clone https://github.com/MortezaShoeibi/SampleProject-django.git && cd SampleProject-django/ 13 | ``` 14 | - Create and activate a virtual environment: 15 | ```bash 16 | python3 -m venv env 17 | # then: 18 | source env/bin/activate 19 | ``` 20 | - On windows: 21 | ```powershell 22 | python -m venv env 23 | # then: 24 | ./env/Scripts/activate 25 | ``` 26 | - Install required packages: 27 | ```bash 28 | pip3 install -r requirements.txt 29 | ``` 30 | - Create database tables: 31 | ```bash 32 | python3 ./manage.py migrate 33 | ``` 34 | - run: 35 | ```bash 36 | python3 ./manage.py runserver 37 | ``` 38 | The project will be running on this address: `127.0.0.1:8000` add it to your browser search path and you will be able to see your own version of the project running locally. 39 | 40 | To add content to the site you need to get into the admin panel, for this follow these steps below: 41 | - Create a super user: 42 | ```bash 43 | python3 ./manage.py createsuperuser 44 | ``` 45 | - Login to this address `127.0.0.1:8000/admin` using the user you created before and add your content 46 | 47 | # LICENSE 48 | 49 | This is a free software published under the MIT LICENSE, feel free to copy, modify, fork, override, change or do whatever you want. check the [LICENSE](./LICENSE) file for more information. 50 | -------------------------------------------------------------------------------- /SampleProject/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/SampleProject/__init__.py -------------------------------------------------------------------------------- /SampleProject/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for SampleProject project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SampleProject.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /SampleProject/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for `SampleProject` project. 3 | 4 | Generated by 'django-admin startproject' using Django 4.0.5. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/4.0/ref/settings/ 11 | """ 12 | 13 | from os import path 14 | from pathlib import Path 15 | from decouple import config 16 | 17 | 18 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 19 | BASE_DIR = Path(__file__).resolve().parent.parent 20 | 21 | 22 | # Quick-start development settings - unsuitable for production 23 | # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ 24 | 25 | # SECURITY WARNING: keep the secret key used in production secret! 26 | SECRET_KEY = config("SECRET_KEY") 27 | 28 | # SECURITY WARNING: don't run with debug turned on in production! 29 | DEBUG = True 30 | 31 | ALLOWED_HOSTS = [] 32 | 33 | 34 | # Application definition 35 | 36 | INSTALLED_APPS = [ 37 | 'django.contrib.admin', 38 | 'django.contrib.auth', 39 | 'django.contrib.contenttypes', 40 | 'django.contrib.sessions', 41 | 'django.contrib.messages', 42 | 'django.contrib.staticfiles', 43 | 44 | # local apps 45 | 'home.apps.HomeConfig', 46 | 'blog.apps.BlogConfig', 47 | 'books.apps.BooksConfig', 48 | 49 | # third party packages 50 | 'django_social_share', 51 | 'tinymce', 52 | 'django_cleanup.apps.CleanupConfig', 53 | ] 54 | 55 | MIDDLEWARE = [ 56 | 'django.middleware.security.SecurityMiddleware', 57 | 'django.contrib.sessions.middleware.SessionMiddleware', 58 | 'django.middleware.common.CommonMiddleware', 59 | 'django.middleware.csrf.CsrfViewMiddleware', 60 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 61 | 'django.contrib.messages.middleware.MessageMiddleware', 62 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 63 | ] 64 | 65 | ROOT_URLCONF = 'SampleProject.urls' 66 | 67 | TEMPLATES = [ 68 | { 69 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 70 | 'DIRS': [BASE_DIR / 'templates'] 71 | , 72 | 'APP_DIRS': True, 73 | 'OPTIONS': { 74 | 'context_processors': [ 75 | 'django.template.context_processors.debug', 76 | 'django.template.context_processors.request', 77 | 'django.contrib.auth.context_processors.auth', 78 | 'django.contrib.messages.context_processors.messages', 79 | # local processors 80 | 'context_processors.context_processors.socials', 81 | ], 82 | }, 83 | }, 84 | ] 85 | 86 | WSGI_APPLICATION = 'SampleProject.wsgi.application' 87 | 88 | 89 | # Database 90 | # https://docs.djangoproject.com/en/4.0/ref/settings/#databases 91 | 92 | DATABASES = { 93 | 'default': { 94 | 'ENGINE': 'django.db.backends.sqlite3', 95 | 'NAME': BASE_DIR / 'db.sqlite3', 96 | } 97 | } 98 | 99 | 100 | # Password validation 101 | # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators 102 | 103 | AUTH_PASSWORD_VALIDATORS = [ 104 | { 105 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 106 | }, 107 | { 108 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 109 | }, 110 | { 111 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 112 | }, 113 | { 114 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 115 | }, 116 | ] 117 | 118 | 119 | # Internationalization 120 | # https://docs.djangoproject.com/en/4.0/topics/i18n/ 121 | 122 | LANGUAGE_CODE = 'fa-ir' 123 | 124 | TIME_ZONE = 'Asia/Tehran' 125 | 126 | USE_I18N = True 127 | 128 | USE_TZ = True 129 | 130 | 131 | # Static files (CSS, JavaScript, Images) 132 | # https://docs.djangoproject.com/en/4.0/howto/static-files/ 133 | 134 | STATIC_URL = 'static/' 135 | MEDIA_URL = 'media/' 136 | STATICFILES_DIRS = [path.join(BASE_DIR, 'assets')] 137 | MEDIA_ROOT = path.join(BASE_DIR, 'media') 138 | 139 | # Default primary key field type 140 | # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field 141 | 142 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 143 | -------------------------------------------------------------------------------- /SampleProject/settings.sample.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for `SampleProject` project. 3 | 4 | Generated by 'django-admin startproject' using Django 4.0.5. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.0/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/4.0/ref/settings/ 11 | """ 12 | 13 | from os import path 14 | from pathlib import Path 15 | 16 | 17 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 18 | BASE_DIR = Path(__file__).resolve().parent.parent 19 | 20 | 21 | # Quick-start development settings - unsuitable for production 22 | # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ 23 | 24 | # SECURITY WARNING: keep the secret key used in production secret! 25 | SECRET_KEY = 'django-insecure-v*!&34tyrdc5rl-j^#xqdk37saahd7dk)t7nqu*yxtq26+ts6p' 26 | 27 | # SECURITY WARNING: don't run with debug turned on in production! 28 | DEBUG = True 29 | 30 | ALLOWED_HOSTS = ['*'] 31 | 32 | 33 | # Application definition 34 | 35 | INSTALLED_APPS = [ 36 | 'django.contrib.admin', 37 | 'django.contrib.auth', 38 | 'django.contrib.contenttypes', 39 | 'django.contrib.sessions', 40 | 'django.contrib.messages', 41 | 'django.contrib.staticfiles', 42 | 43 | # local apps 44 | 'home.apps.HomeConfig', 45 | 'blog.apps.BlogConfig', 46 | 'books.apps.BooksConfig', 47 | 48 | # third party packages 49 | 'django_social_share', 50 | 'tinymce', 51 | 'django_cleanup.apps.CleanupConfig', 52 | ] 53 | 54 | MIDDLEWARE = [ 55 | 'django.middleware.security.SecurityMiddleware', 56 | 'django.contrib.sessions.middleware.SessionMiddleware', 57 | 'django.middleware.common.CommonMiddleware', 58 | 'django.middleware.csrf.CsrfViewMiddleware', 59 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 60 | 'django.contrib.messages.middleware.MessageMiddleware', 61 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 62 | ] 63 | 64 | ROOT_URLCONF = 'SampleProject.urls' 65 | 66 | TEMPLATES = [ 67 | { 68 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 69 | 'DIRS': [BASE_DIR / 'templates'] 70 | , 71 | 'APP_DIRS': True, 72 | 'OPTIONS': { 73 | 'context_processors': [ 74 | 'django.template.context_processors.debug', 75 | 'django.template.context_processors.request', 76 | 'django.contrib.auth.context_processors.auth', 77 | 'django.contrib.messages.context_processors.messages', 78 | # local processors 79 | 'context_processors.context_processors.socials', 80 | ], 81 | }, 82 | }, 83 | ] 84 | 85 | WSGI_APPLICATION = 'SampleProject.wsgi.application' 86 | 87 | 88 | # Database 89 | # https://docs.djangoproject.com/en/4.0/ref/settings/#databases 90 | 91 | DATABASES = { 92 | 'default': { 93 | 'ENGINE': 'django.db.backends.sqlite3', 94 | 'NAME': BASE_DIR / 'db.sqlite3', 95 | } 96 | } 97 | 98 | 99 | # Password validation 100 | # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators 101 | 102 | AUTH_PASSWORD_VALIDATORS = [ 103 | { 104 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 105 | }, 106 | { 107 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 108 | }, 109 | { 110 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 111 | }, 112 | { 113 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 114 | }, 115 | ] 116 | 117 | 118 | # Internationalization 119 | # https://docs.djangoproject.com/en/4.0/topics/i18n/ 120 | 121 | LANGUAGE_CODE = 'fa-ir' 122 | 123 | TIME_ZONE = 'Asia/Tehran' 124 | 125 | USE_I18N = True 126 | 127 | USE_TZ = True 128 | 129 | 130 | # Static files (CSS, JavaScript, Images) 131 | # https://docs.djangoproject.com/en/4.0/howto/static-files/ 132 | 133 | STATIC_URL = 'static/' 134 | MEDIA_URL = 'media/' 135 | STATICFILES_DIRS = [path.join(BASE_DIR, 'assets')] 136 | MEDIA_ROOT = path.join(BASE_DIR, 'media') 137 | 138 | # Default primary key field type 139 | # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field 140 | 141 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 142 | -------------------------------------------------------------------------------- /SampleProject/urls.py: -------------------------------------------------------------------------------- 1 | """SampleProject URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/4.0/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path, include 18 | from django.conf.urls.static import static 19 | from . import settings 20 | 21 | urlpatterns = [ 22 | path('admin/', admin.site.urls), 23 | path('tinymce/', include('tinymce.urls')), 24 | path('', include('home.urls')), 25 | path('blog/', include('blog.urls')), 26 | path('books/', include('books.urls')), 27 | ] 28 | 29 | urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 30 | -------------------------------------------------------------------------------- /SampleProject/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for SampleProject 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/4.0/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', 'SampleProject.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /assets/css/color/blue.css: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------- 2 | * Template Name : NOLAN - Fully Responsive Personal Template 3 | * Author : Toonalite Group 4 | * Version : 1.0.0 5 | * Created : october 2021 6 | * File Description : Color css file of the template 7 | *------------------------------------------------------------*/ 8 | .span{ 9 | color:#98acf8; 10 | } 11 | .pill-button{ 12 | background-image: linear-gradient(to right, #98acf8 0%,#7ad5ff 51%, #83b3ff 100%); 13 | } 14 | .loader span { 15 | background:#98acf8; 16 | } 17 | .loader span:nth-child(2) { 18 | background:#98acf8; 19 | } 20 | .loader span:nth-child(3) { 21 | background:#98acf8; 22 | } 23 | .loader span:nth-child(4) { 24 | background:#98acf8; 25 | } 26 | .loader span:nth-child(5) { 27 | background:#98acf8; 28 | } 29 | .loader span:nth-child(6) { 30 | background:#98acf8; 31 | } 32 | .navbar-nav .navbar-item a:hover{ 33 | color: #98acf8; 34 | } 35 | .header .social-icons li i { 36 | color:#98acf8; 37 | } 38 | .header .nav-pills .nav-link.active, .nav-pills .show > .nav-link{ 39 | color:#98acf8; 40 | } 41 | .about-boxes-content:before, 42 | .about-boxes-content:after { 43 | background: #98acf8; 44 | } 45 | .about-boxes-icon{ 46 | background-color:#b8c6ff; 47 | } 48 | .about-list i{ 49 | color:#98acf8; 50 | } 51 | .count-icon{ 52 | color:#5386ff; 53 | } 54 | 55 | .skill-box .fill-skillbar { 56 | background: rgba(152,172,248,1); 57 | background: linear-gradient(90deg, #98acf8 0%, #a0b3ff 51%, #d6dfff 100%); 58 | } 59 | .gtco-testimonials .owl-dots span { 60 | border: 2px solid #98acf8; 61 | } 62 | .gtco-testimonials .owl-dots .active span { 63 | background: #98acf8; 64 | } 65 | .gtco-testimonials .card { 66 | box-shadow: 0 8px 30px -7px #7a94ff; 67 | } 68 | .gtco-testimonials .card .card-img-top { 69 | box-shadow: 0 8px 20px -4px #7a94ff; 70 | } 71 | .gtco-testimonials .card h5 { 72 | color: #98acf8; 73 | } 74 | #portfolio-filter a:hover, 75 | #portfolio-filter a.active { 76 | color:#98acf8; 77 | } 78 | .portfolio .img-overlay-content { 79 | color:#739de4; 80 | } 81 | .portfolio .portfolio-icon a, .portfolio .portfolio-icon button { 82 | border:1px solid #739de4; 83 | color:#739de4; 84 | } 85 | .portfolio .portfolio-icon a:hover, .portfolio .portfolio-icon button:hover { 86 | background-color: #98acf8; 87 | } 88 | .blog-content a:hover{ 89 | background: -webkit-linear-gradient(#eee, rgb(93, 124, 248)); 90 | margin-left: 8px; 91 | background-clip: text; 92 | -webkit-background-clip: text; 93 | -webkit-text-fill-color: transparent; 94 | } 95 | .video-box-btn:hover { 96 | box-shadow: 0 0 0 20px rgb(112, 139, 248); 97 | } 98 | .video-content h5 { 99 | box-shadow: 5px 5px 40px 5px rgb(206, 214, 248); 100 | 101 | } 102 | .footer-icon a{ 103 | background-color:#7a94ff; 104 | } 105 | .return-to-top { 106 | background-color: #7a94ff; 107 | } 108 | .color-switcher .pallet-button { 109 | background-color:#7a94ff; 110 | } 111 | .blog-single .comment-content a{ 112 | color:#7a94ff; 113 | } 114 | .inner-page .entry-meta ul li i { 115 | background-color: #98acf8; 116 | } 117 | .aside-item-portfolio a { 118 | color:#98acf8; 119 | 120 | } 121 | .footer-content a { 122 | color: #98acf8; 123 | } -------------------------------------------------------------------------------- /assets/css/color/green.css: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------- 2 | * Template Name : NOLAN - Fully Responsive Personal Template 3 | * Author : Toonalite Group 4 | * Version : 1.0.0 5 | * Created : october 2021 6 | * File Description : Color css file of the template 7 | *------------------------------------------------------------*/ 8 | .span{ 9 | color:#08a66d; 10 | } 11 | .pill-button{ 12 | background-image: linear-gradient(to right, #96deda 0%, #93f7ac 51%, #a0ffb8 100%); 13 | } 14 | .loader span { 15 | background:#08a66d; 16 | } 17 | .loader span:nth-child(2) { 18 | background:#08a66d; 19 | } 20 | .loader span:nth-child(3) { 21 | background:#08a66d; 22 | } 23 | .loader span:nth-child(4) { 24 | background:#08a66d; 25 | } 26 | .loader span:nth-child(5) { 27 | background:#08a66d; 28 | } 29 | .loader span:nth-child(6) { 30 | background:#08a66d; 31 | } 32 | .navbar-nav .navbar-item a:hover{ 33 | color: #08a66d; 34 | } 35 | .header .social-icons li i { 36 | color:#08a66d; 37 | } 38 | .header .nav-pills .nav-link.active, .nav-pills .show > .nav-link{ 39 | color:#08a66d; 40 | } 41 | .about-boxes-content:before, 42 | .about-boxes-content:after { 43 | background: #0bcf87; 44 | } 45 | .about-boxes-icon{ 46 | background-color:#08a66d; 47 | } 48 | .about-list i{ 49 | color:#08a66d; 50 | } 51 | .count-icon{ 52 | color:#08a66d; 53 | } 54 | 55 | .skill-box .fill-skillbar { 56 | background: rgba(128,230,154,1); 57 | background: linear-gradient(to right, #08a66d 0%, #24d494 51%, #b9ffca 100%); 58 | } 59 | .gtco-testimonials .owl-dots span { 60 | border: 2px solid #08a66d; 61 | } 62 | .gtco-testimonials .owl-dots .active span { 63 | background: #08a66d; 64 | } 65 | .gtco-testimonials .card { 66 | box-shadow: 0 8px 30px -7px #b8ffca; 67 | } 68 | .gtco-testimonials .card .card-img-top { 69 | box-shadow: 0 8px 20px -4px #b8ffca; 70 | } 71 | .gtco-testimonials .card h5 { 72 | color: #08a66d; 73 | } 74 | #portfolio-filter a:hover, 75 | #portfolio-filter a.active { 76 | color:#08a66d; 77 | } 78 | .portfolio .img-overlay-content { 79 | color:#08a66d; 80 | } 81 | .portfolio .portfolio-icon a, .portfolio .portfolio-icon button { 82 | border:1px solid #08a66d; 83 | color:#08a66d; 84 | } 85 | .portfolio .portfolio-icon a:hover, .portfolio .portfolio-icon button:hover { 86 | background-color: #4ea965; 87 | } 88 | .blog-content a:hover{ 89 | background: -webkit-linear-gradient(#eee, rgb(76, 158, 96)); 90 | margin-left: 8px; 91 | background-clip: text; 92 | -webkit-background-clip: text; 93 | -webkit-text-fill-color: transparent; 94 | } 95 | .video-box-btn:hover { 96 | box-shadow: 0 0 0 20px rgb(182, 243, 197); 97 | } 98 | .video-content h5 { 99 | box-shadow: 5px 5px 40px 5px rgb(182, 243, 197); 100 | } 101 | .footer-icon a{ 102 | background-color:#08a66d; 103 | } 104 | .return-to-top { 105 | background-color: #08a66d; 106 | } 107 | .color-switcher .pallet-button { 108 | background-color:#08a66d; 109 | } 110 | .blog-single .comment-content a{ 111 | color:#08a66d; 112 | } 113 | .inner-page .entry-meta ul li i { 114 | background-color: #08a66d 115 | } 116 | .aside-item-portfolio a { 117 | color:#08a66d; 118 | 119 | } 120 | .footer-content a { 121 | color: #08a66d; 122 | } -------------------------------------------------------------------------------- /assets/css/color/orange.css: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------- 2 | * Template Name : NOLAN - Fully Responsive Personal Template 3 | * Author : Toonalite Group 4 | * Version : 1.0.0 5 | * Created : october 2021 6 | * File Description : Color css file of the template 7 | *------------------------------------------------------------*/ 8 | .span{ 9 | color:#fb912b; 10 | } 11 | .pill-button{ 12 | background-image: linear-gradient(to right, #fb912b 0%, #ffc3a0 51%, #faa75a 100%); 13 | } 14 | .loader span { 15 | background:#fb912b; 16 | } 17 | .loader span:nth-child(2) { 18 | background:#fb912b; 19 | } 20 | .loader span:nth-child(3) { 21 | background:#fb912b; 22 | } 23 | .loader span:nth-child(4) { 24 | background:#fb912b; 25 | } 26 | .loader span:nth-child(5) { 27 | background:#fb912b; 28 | } 29 | .loader span:nth-child(6) { 30 | background:#fb912b; 31 | } 32 | .navbar-nav .navbar-item a:hover{ 33 | color: #fb912b; 34 | } 35 | .header .social-icons li i { 36 | color:#fcb97c; 37 | } 38 | .header .nav-pills .nav-link.active, .nav-pills .show > .nav-link{ 39 | color:#fb912b; 40 | } 41 | .about-boxes-content:before, 42 | .about-boxes-content:after { 43 | background: #f7b374; 44 | } 45 | .about-boxes-icon{ 46 | background-color:#fb912b; 47 | } 48 | .about-list i{ 49 | color:#fb912b; 50 | } 51 | .count-icon{ 52 | color:#fb912b; 53 | } 54 | .skill-box .fill-skillbar { 55 | background: rgba(251,145,43,1); 56 | background: linear-gradient(90deg, #fb912b 0%, #f8af6a 51%, #f8c99d 100%); 57 | } 58 | .gtco-testimonials .owl-dots span { 59 | border: 2px solid #fb912b; 60 | } 61 | .gtco-testimonials .owl-dots .active span { 62 | background: #fb912b; 63 | } 64 | .gtco-testimonials .card { 65 | box-shadow: 0 8px 30px -7px #f8cfa9; 66 | } 67 | .gtco-testimonials .card .card-img-top { 68 | box-shadow: 0 8px 20px -4px #fdc692; 69 | } 70 | .gtco-testimonials .card h5 { 71 | color: #fb912b; 72 | } 73 | #portfolio-filter a:hover, 74 | #portfolio-filter a.active { 75 | color:#fb912b; 76 | } 77 | .portfolio .img-overlay-content { 78 | color:#fb912b; 79 | } 80 | .portfolio .portfolio-icon a, .portfolio .portfolio-icon button { 81 | border:1px solid #fb912b; 82 | color:#fb912b; 83 | } 84 | .portfolio .portfolio-icon a:hover, .portfolio .portfolio-icon button:hover { 85 | background-color: #fb912b; 86 | } 87 | .blog-content a:hover{ 88 | background: -webkit-linear-gradient(#eee, rgb(245, 127, 17)); 89 | margin-left: 8px; 90 | background-clip: text; 91 | -webkit-background-clip: text; 92 | -webkit-text-fill-color: transparent; 93 | } 94 | .video-box-btn:hover { 95 | box-shadow: 0 0 0 20px rgb(250, 184, 121); 96 | } 97 | .video-content h5 { 98 | box-shadow: 5px 5px 40px 5px rgb(255, 203, 155); 99 | } 100 | .footer-icon a{ 101 | background-color:#fb912b; 102 | } 103 | .return-to-top { 104 | background-color: #fb912b; 105 | } 106 | .color-switcher .pallet-button { 107 | background-color:#fb912b; 108 | } 109 | .blog-single .comment-content a{ 110 | color:#fb912b; 111 | } 112 | .inner-page .entry-meta ul li i { 113 | background-color: #fb912b; 114 | } 115 | .aside-item-portfolio a { 116 | color:#fb912b; 117 | 118 | } 119 | .footer-content a { 120 | color: #fb912b; 121 | } -------------------------------------------------------------------------------- /assets/css/color/purple.css: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------- 2 | * Template Name : NOLAN - Fully Responsive Personal Template 3 | * Author : Toonalite Group 4 | * Version : 1.0.0 5 | * Created : october 2021 6 | * File Description : Color css file of the template 7 | *------------------------------------------------------------*/ 8 | .span{ 9 | color:#8242AD; 10 | } 11 | .pill-button{ 12 | background-image: linear-gradient(to right, #fbc2eb 0%, #a6c1ee 51%, #fbc2eb 100%); 13 | } 14 | .loader span { 15 | background:#d3bff8; 16 | } 17 | .loader span:nth-child(2) { 18 | background:#fff9be; 19 | } 20 | .loader span:nth-child(3) { 21 | background:#d3bff8; 22 | } 23 | .loader span:nth-child(4) { 24 | background:#c3def1; 25 | } 26 | .loader span:nth-child(5) { 27 | background:#fff9be; 28 | } 29 | .loader span:nth-child(6) { 30 | background:#c3def1; 31 | } 32 | .navbar-nav .navbar-item a:hover{ 33 | color: #8242AD; 34 | } 35 | .header .social-icons li i { 36 | color:#9968bf; 37 | } 38 | .header .nav-pills .nav-link.active, .nav-pills .show > .nav-link{ 39 | color:#8242AD; 40 | } 41 | .about-boxes-content:before, 42 | .about-boxes-content:after { 43 | background: #8242ad74; 44 | } 45 | .about-boxes-icon{ 46 | background-color:#a6c1ee; 47 | } 48 | .about-list i{ 49 | color:#8242AD; 50 | } 51 | .count-icon{ 52 | color:#8242AD; 53 | } 54 | .skill-box .fill-skillbar { 55 | background: rgb(211, 122, 231); 56 | background: linear-gradient(90deg, #8242ad 0%, #9a60bb 51%, #c9aad3 100%); 57 | } 58 | .gtco-testimonials .owl-dots span { 59 | border: 2px solid #8242AD; 60 | } 61 | .gtco-testimonials .owl-dots .active span { 62 | background: #8242AD; 63 | } 64 | .gtco-testimonials .card { 65 | box-shadow: 0 8px 30px -7px #8242ad64; 66 | } 67 | .gtco-testimonials .card .card-img-top { 68 | box-shadow: 0 8px 20px -4px #8242AD; 69 | } 70 | .gtco-testimonials .card h5 { 71 | color: #8242AD; 72 | } 73 | #portfolio-filter a:hover, 74 | #portfolio-filter a.active { 75 | color:#8242AD; 76 | } 77 | .portfolio .img-overlay-content { 78 | color:#8242AD; 79 | } 80 | .portfolio .portfolio-icon a, .portfolio .portfolio-icon button { 81 | border:1px solid #8242AD; 82 | color:#8242AD; 83 | } 84 | .portfolio .portfolio-icon a:hover, .portfolio .portfolio-icon button:hover { 85 | background-color: #c783d3; 86 | } 87 | .blog-content a:hover{ 88 | margin-left: 8px; 89 | background: -webkit-linear-gradient(#eee, rgb(134, 6, 144)); 90 | background-clip: text; 91 | -webkit-background-clip: text; 92 | -webkit-text-fill-color: transparent; 93 | } 94 | .video-box-btn:hover { 95 | box-shadow: 0 0 0 20px rgba(0, 0, 0, 0.1); 96 | } 97 | .video-content h5{ 98 | box-shadow: 5px 5px 40px 5px rgba(188, 140, 196, 0.387); 99 | } 100 | .footer-icon a{ 101 | background-color:#9968bf; 102 | } 103 | .return-to-top { 104 | background-color: #8242AD; 105 | } 106 | .color-switcher .pallet-button { 107 | background-color:#955dbf; 108 | } 109 | .blog-single .comment-content a{ 110 | color:#9968bf; 111 | } 112 | .inner-page .entry-meta ul li i { 113 | background-color: #9968bf 114 | } 115 | .aside-item-portfolio a { 116 | color:#9968bf; 117 | 118 | } 119 | .footer-content a { 120 | color: #9968bf; 121 | } -------------------------------------------------------------------------------- /assets/css/override.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: Yekan; 3 | src: url("../fonts/Yekan.ttf"); 4 | font-weight: normal; 5 | font-style: normal; 6 | } 7 | 8 | 9 | * { 10 | font-family: Yekan; 11 | } 12 | 13 | -------------------------------------------------------------------------------- /assets/css/owl.carousel.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} -------------------------------------------------------------------------------- /assets/css/rtl.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Vazir-FD-WOL"; 3 | font-style: normal; 4 | font-weight: normal; 5 | src: url("../fonts/Vazir-FD-WOL.woff2") format("woff2"), url("../fonts/Vazir-Bold-FD-WOL.woff") format("woff"), url("../fonts/Vazir-FD-WOL.ttf") format("truetype"); 6 | } 7 | body,html { 8 | text-align: right; 9 | direction: rtl !important; 10 | line-height: 1.5; 11 | font-family: 'Vazir-FD-WOL', sans-serif; 12 | } 13 | p { 14 | line-height: 1.5; 15 | font-size: 15px; 16 | } 17 | h1, h2, h3, h4, h5, h6, .h1 { 18 | font-family: 'Vazir-FD-WOL', sans-serif; 19 | } 20 | h1 { 21 | font-weight: 700; 22 | } 23 | .rtl .text-left { 24 | text-align: right !important; 25 | } 26 | .rtl .mfp-counter { 27 | direction: rtl; 28 | } 29 | ul { 30 | padding-right: 0; 31 | } 32 | .pill-button:before, 33 | .pill-button:after { 34 | right: 0; 35 | } 36 | .pill-button-01 { 37 | margin-right:16px; 38 | } 39 | .pill-button-01:before, 40 | .pill-button-01:after { 41 | right: 0; 42 | } 43 | .pill-button-03 { 44 | margin-right: 16px; 45 | } 46 | /****************** 47 | Style Arrangement 48 | 1-Header 49 | 2-Hero 50 | 3-About-box 51 | 4- Skill 52 | 5- Testimonial 53 | 6- Services 54 | 7- Portfolio 55 | 8- Blog 56 | 9- video 57 | 10- Contact 58 | 11- Footer 59 | 12- Return-to-top 60 | 13- Blog Page 61 | 14- blog-single-page 62 | 15- 404 Error 63 | 16- Media 64 | 65 | *******************/ 66 | /****** Header ******/ 67 | .preloader{ 68 | direction: ltr; 69 | } 70 | .navbar-nav { 71 | margin-left: 16px; 72 | left: 50%; 73 | transform: translateX(-50%); 74 | } 75 | .navbar-nav .navbar-item{ 76 | margin-left: 24px; 77 | } 78 | .header .social-icons li i { 79 | margin-left:14px; 80 | } 81 | .navbar-expand-lg .navbar-collapse { 82 | justify-content: start; 83 | } 84 | /****** Hero ******/ 85 | .hero .pill-button-play img{ 86 | margin-right:32px; 87 | } 88 | /****** About-box ******/ 89 | .about-description:before, 90 | .about-description:after { 91 | right: 0; 92 | left: auto; 93 | } 94 | /****** Skill ******/ 95 | .skill-box .skillbar-title { 96 | right: -17px; 97 | } 98 | .skill-box .skillbar-title span { 99 | margin-right: 18px; 100 | } 101 | .skill-box .fill-skillbar { 102 | float: right; 103 | } 104 | .skill-box .skill-bar-percent { 105 | left: 0; 106 | right: auto; 107 | } 108 | /****** Testimonial ******/ 109 | .testimonial{ 110 | direction: ltr; 111 | } 112 | .gtco-testimonials .card { 113 | direction: rtl; 114 | } 115 | /****** Services ******/ 116 | .services-icon img{ 117 | margin-left: 12px; 118 | margin-right: 0; 119 | float: right; 120 | } 121 | /****** Portfolio ******/ 122 | #portfolio-filter a { 123 | margin-left: 8px; 124 | margin-right: 0; 125 | 126 | } 127 | .portfolio .img-overlay-content { 128 | left:-6%; 129 | right: auto; 130 | } 131 | .mfp-counter { 132 | left: 0; 133 | direction: ltr; 134 | } 135 | /****** Blog ******/ 136 | .blog-content a:hover{ 137 | margin-right: 8px; 138 | } 139 | /****** video ******/ 140 | .video-box-btn { 141 | left: 52%; 142 | right: auto; 143 | transform: translateY(-50%) translateX(-50%); 144 | } 145 | 146 | /****** Contact ******/ 147 | #message.toast { 148 | right: 12em; 149 | } 150 | /****** Footer ******/ 151 | .footer-icon{ 152 | float: left; 153 | } 154 | .footer-icon a{ 155 | margin-left:40px; 156 | margin-right: 10px; 157 | } 158 | /****** Return-to-top ******/ 159 | .return-to-top { 160 | left: 15px; 161 | right: auto; 162 | } 163 | /****** Inner Page******/ 164 | /***********************/ 165 | /****** Blog Page ******/ 166 | .inner-page .entry-meta ul { 167 | margin-bottom: 0; 168 | } 169 | .inner-page .entry-meta ul li i{ 170 | font-size:24px; 171 | margin-right:12px; 172 | padding: 12px; 173 | background-color:#a6c1ee; 174 | color:#fff; 175 | display: flex; 176 | text-align:center !important; 177 | border-radius:50px; 178 | float:left; 179 | } 180 | .inner-page .entry-meta ul a i:hover{ 181 | transform: rotate(360deg); 182 | transition: 0.9s ease; 183 | } 184 | .inner-page .entry-meta ul li p{ 185 | float: left; 186 | } 187 | .blog-box{ 188 | margin-bottom: 24px; 189 | } 190 | /****** blog-single-page ******/ 191 | .blog-single .comment-content { 192 | padding-right: 60px; 193 | } 194 | .blog-single .comment-img { 195 | right:10px; 196 | left: auto; 197 | } 198 | 199 | .blog-single .comment-reply-link { 200 | left: 32px; 201 | right: auto; 202 | transform: scaleX(-1); 203 | } 204 | .blog-single .about-description-box { 205 | padding-right: 32px; 206 | } 207 | .blog-single .about-description-box p::before { 208 | right: -30px; 209 | left: auto; 210 | } 211 | .blog-single .search-boxes button.btn { 212 | left: 6px; 213 | right: auto; 214 | } 215 | .blog-single .aside-title h6 { 216 | margin-left: 15px; 217 | } 218 | .blog-single .aside-item ul li span { 219 | margin-right: auto; 220 | margin-left: 0; 221 | } 222 | .blog-single .post-image { 223 | margin-left: 16px; 224 | } 225 | .blog-single .tagcloud a { 226 | margin-left: 4px; 227 | } 228 | /****** 404 Error ******/ 229 | .search-404 form button{ 230 | left: 6px; 231 | right: auto; 232 | } 233 | /****** media ******/ 234 | /*******************/ 235 | @media(max-width:1200px){ 236 | .footer .footer-content,.footer-icon{ 237 | margin-right:30px; 238 | } 239 | .blog-single #message.toast { 240 | right: 12em; 241 | left: auto; 242 | } 243 | } 244 | @media(max-width:991px) { 245 | 246 | #navbarSupportedContent button.close-menu{ 247 | left: 35px; 248 | } 249 | .navbar-nav { 250 | left: 5%; 251 | } 252 | .count-up{ 253 | right: initial; 254 | } 255 | 256 | .footer .footer-content,.footer-icon{ 257 | margin-right:30px; 258 | } 259 | 260 | .blog-single #message.toast { 261 | right: 12em; 262 | left: auto; 263 | } 264 | } 265 | @media(max-width: 767px) { 266 | .footer .footer-content,.footer-icon{ 267 | margin-right:30px; 268 | } 269 | .blog-single #message.toast { 270 | right: 12em; 271 | left: auto; 272 | } 273 | } 274 | @media (max-width: 576px) { 275 | .footer .footer-content,.footer-icon{ 276 | margin-right:30px; 277 | } 278 | .blog-single #message.toast { 279 | right: 12em; 280 | left: auto; 281 | } 282 | } 283 | @media (max-width: 360px) { 284 | .contact-box:nth-child(2){ 285 | float: left; 286 | } 287 | .blog-single .comment-reply-link { 288 | left: -10px; 289 | right: auto; 290 | } 291 | .blog-single #message.toast { 292 | right: 12em; 293 | left: auto; 294 | } 295 | } 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | -------------------------------------------------------------------------------- /assets/fonts/Vazir-Bold-FD-WOL.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Bold-FD-WOL.eot -------------------------------------------------------------------------------- /assets/fonts/Vazir-Bold-FD-WOL.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Bold-FD-WOL.ttf -------------------------------------------------------------------------------- /assets/fonts/Vazir-Bold-FD-WOL.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Bold-FD-WOL.woff -------------------------------------------------------------------------------- /assets/fonts/Vazir-Bold-FD-WOL.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Bold-FD-WOL.woff2 -------------------------------------------------------------------------------- /assets/fonts/Vazir-FD-WOL.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-FD-WOL.ttf -------------------------------------------------------------------------------- /assets/fonts/Vazir-FD-WOL.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-FD-WOL.woff -------------------------------------------------------------------------------- /assets/fonts/Vazir-FD-WOL.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-FD-WOL.woff2 -------------------------------------------------------------------------------- /assets/fonts/Vazir-Light-FD-WOL.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Light-FD-WOL.eot -------------------------------------------------------------------------------- /assets/fonts/Vazir-Light-FD-WOL.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Light-FD-WOL.ttf -------------------------------------------------------------------------------- /assets/fonts/Vazir-Light-FD-WOL.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Light-FD-WOL.woff -------------------------------------------------------------------------------- /assets/fonts/Vazir-Light-FD-WOL.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Light-FD-WOL.woff2 -------------------------------------------------------------------------------- /assets/fonts/Vazir-Medium-FD-WOL.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Medium-FD-WOL.eot -------------------------------------------------------------------------------- /assets/fonts/Vazir-Medium-FD-WOL.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Medium-FD-WOL.ttf -------------------------------------------------------------------------------- /assets/fonts/Vazir-Medium-FD-WOL.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Medium-FD-WOL.woff -------------------------------------------------------------------------------- /assets/fonts/Vazir-Medium-FD-WOL.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Medium-FD-WOL.woff2 -------------------------------------------------------------------------------- /assets/fonts/Vazir-Thin-FD-WOL.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Thin-FD-WOL.eot -------------------------------------------------------------------------------- /assets/fonts/Vazir-Thin-FD-WOL.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Thin-FD-WOL.ttf -------------------------------------------------------------------------------- /assets/fonts/Vazir-Thin-FD-WOL.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Thin-FD-WOL.woff -------------------------------------------------------------------------------- /assets/fonts/Vazir-Thin-FD-WOL.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Vazir-Thin-FD-WOL.woff2 -------------------------------------------------------------------------------- /assets/fonts/Yekan.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/Yekan.ttf -------------------------------------------------------------------------------- /assets/fonts/bootstrap-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/bootstrap-icons.woff -------------------------------------------------------------------------------- /assets/fonts/bootstrap-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/fonts/bootstrap-icons.woff2 -------------------------------------------------------------------------------- /assets/img/Remote-team.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/Remote-team.gif -------------------------------------------------------------------------------- /assets/img/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/Thumbs.db -------------------------------------------------------------------------------- /assets/img/back-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/back-06.jpg -------------------------------------------------------------------------------- /assets/img/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/back.png -------------------------------------------------------------------------------- /assets/img/blog-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/blog-01.png -------------------------------------------------------------------------------- /assets/img/blog-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/blog-02.png -------------------------------------------------------------------------------- /assets/img/blog-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/blog-03.png -------------------------------------------------------------------------------- /assets/img/blog-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/blog-06.png -------------------------------------------------------------------------------- /assets/img/blog-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/blog-9.png -------------------------------------------------------------------------------- /assets/img/charles-deluvio-0v_1TPz1uXw-unsplash(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/charles-deluvio-0v_1TPz1uXw-unsplash(1).jpg -------------------------------------------------------------------------------- /assets/img/client-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/client-1.jpg -------------------------------------------------------------------------------- /assets/img/client-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/client-2.jpg -------------------------------------------------------------------------------- /assets/img/client-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/client-3.jpg -------------------------------------------------------------------------------- /assets/img/client-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/client-4.jpg -------------------------------------------------------------------------------- /assets/img/client-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/client-5.jpg -------------------------------------------------------------------------------- /assets/img/client-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/client-6.jpg -------------------------------------------------------------------------------- /assets/img/cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/cm.png -------------------------------------------------------------------------------- /assets/img/colorful-letter-n-vector-20527143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/colorful-letter-n-vector-20527143.png -------------------------------------------------------------------------------- /assets/img/cotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/cotation.png -------------------------------------------------------------------------------- /assets/img/count-p.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/count-p.jpg -------------------------------------------------------------------------------- /assets/img/dribble.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/img/eitaa-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/eitaa-icon.png -------------------------------------------------------------------------------- /assets/img/eitaa-icon2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/eitaa-icon2.png -------------------------------------------------------------------------------- /assets/img/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/error.png -------------------------------------------------------------------------------- /assets/img/facebook(1).svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/img/facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 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 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/favicon.ico -------------------------------------------------------------------------------- /assets/img/github(1).svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 14 | 15 | 24 | 25 | 26 | 30 | 32 | 33 | 36 | 41 | 43 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /assets/img/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 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 | -------------------------------------------------------------------------------- /assets/img/gmail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/gmail.png -------------------------------------------------------------------------------- /assets/img/gmail.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 19 | 20 | 23 | 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 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /assets/img/hero-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/hero-02.png -------------------------------------------------------------------------------- /assets/img/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/hero.png -------------------------------------------------------------------------------- /assets/img/house.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 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 | -------------------------------------------------------------------------------- /assets/img/icon-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/icon-user.png -------------------------------------------------------------------------------- /assets/img/instagram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/img/location-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/location-map.png -------------------------------------------------------------------------------- /assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/logo.png -------------------------------------------------------------------------------- /assets/img/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/map.png -------------------------------------------------------------------------------- /assets/img/mike-dorner-sf_1ZDA1YFw-unsplash(1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/mike-dorner-sf_1ZDA1YFw-unsplash(1).jpg -------------------------------------------------------------------------------- /assets/img/pexels-anna-shvets-5325842.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-anna-shvets-5325842.jpg -------------------------------------------------------------------------------- /assets/img/pexels-anna-shvets-5325881.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-anna-shvets-5325881.jpg -------------------------------------------------------------------------------- /assets/img/pexels-anna-tarazevich-7216927.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-anna-tarazevich-7216927.jpg -------------------------------------------------------------------------------- /assets/img/pexels-ante-6717979.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-ante-6717979.jpg -------------------------------------------------------------------------------- /assets/img/pexels-davide-de-giovanni-3961576.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-davide-de-giovanni-3961576.jpg -------------------------------------------------------------------------------- /assets/img/pexels-dibakar-roy-5563381.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-dibakar-roy-5563381.jpg -------------------------------------------------------------------------------- /assets/img/pexels-ketut-subiyanto-4546165.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-ketut-subiyanto-4546165.jpg -------------------------------------------------------------------------------- /assets/img/pexels-mika-borgia-1317712.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-mika-borgia-1317712.jpg -------------------------------------------------------------------------------- /assets/img/pexels-monstera-6781228.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-monstera-6781228.jpg -------------------------------------------------------------------------------- /assets/img/pexels-vi-tran-4154627.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/pexels-vi-tran-4154627.jpg -------------------------------------------------------------------------------- /assets/img/phone(1).svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/img/placeholder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 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 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /assets/img/play-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/play-button.png -------------------------------------------------------------------------------- /assets/img/pocket-watch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/img/portfolio-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-01.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-02.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-03.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-04.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-05.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-06.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-07.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-08.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-09.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-10.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-11.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-12.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-13.jpg -------------------------------------------------------------------------------- /assets/img/portfolio-14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/portfolio-14.jpg -------------------------------------------------------------------------------- /assets/img/post-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/post-01.png -------------------------------------------------------------------------------- /assets/img/preview/pre-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/preview/pre-02.png -------------------------------------------------------------------------------- /assets/img/preview/pre-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/preview/pre-03.png -------------------------------------------------------------------------------- /assets/img/preview/pre-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/preview/pre-04.png -------------------------------------------------------------------------------- /assets/img/preview/pre-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/preview/pre-05.png -------------------------------------------------------------------------------- /assets/img/preview/pre-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/preview/pre-06.png -------------------------------------------------------------------------------- /assets/img/preview/preview-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/preview/preview-01.png -------------------------------------------------------------------------------- /assets/img/services.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/services.png -------------------------------------------------------------------------------- /assets/img/skill-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/skill-1.jpg -------------------------------------------------------------------------------- /assets/img/skill-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/skill-img.png -------------------------------------------------------------------------------- /assets/img/soundcloud.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 12 | 14 | 16 | 17 | 18 | 19 | 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 | -------------------------------------------------------------------------------- /assets/img/telephone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 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 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /assets/img/twitch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/img/video-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/assets/img/video-img.png -------------------------------------------------------------------------------- /assets/img/whatsapp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 15 | 16 | 17 | 18 | 19 | 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 | -------------------------------------------------------------------------------- /assets/img/wicker-basket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/js/jquery-easing-min.js: -------------------------------------------------------------------------------- 1 | /**! 2 | * easy-pie-chart 3 | * Lightweight plugin to render simple, animated and retina optimized pie charts 4 | * 5 | * @license 6 | * @author Robert Fleischmann (http://robert-fleischmann.de) 7 | * @version 2.1.7 8 | **/ 9 | !function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){var b=function(a,b){var c,d=document.createElement("canvas");a.appendChild(d),"object"==typeof G_vmlCanvasManager&&G_vmlCanvasManager.initElement(d);var e=d.getContext("2d");d.width=d.height=b.size;var f=1;window.devicePixelRatio>1&&(f=window.devicePixelRatio,d.style.width=d.style.height=[b.size,"px"].join(""),d.width=d.height=b.size*f,e.scale(f,f)),e.translate(b.size/2,b.size/2),e.rotate((-0.5+b.rotate/180)*Math.PI);var g=(b.size-b.lineWidth)/2;b.scaleColor&&b.scaleLength&&(g-=b.scaleLength+2),Date.now=Date.now||function(){return+new Date};var h=function(a,b,c){c=Math.min(Math.max(-1,c||0),1);var d=0>=c?!0:!1;e.beginPath(),e.arc(0,0,g,0,2*Math.PI*c,d),e.strokeStyle=a,e.lineWidth=b,e.stroke()},i=function(){var a,c;e.lineWidth=1,e.fillStyle=b.scaleColor,e.save();for(var d=24;d>0;--d)d%6===0?(c=b.scaleLength,a=0):(c=.6*b.scaleLength,a=b.scaleLength-c),e.fillRect(-b.size/2+a,0,c,1),e.rotate(Math.PI/12);e.restore()},j=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),k=function(){b.scaleColor&&i(),b.trackColor&&h(b.trackColor,b.trackWidth||b.lineWidth,1)};this.getCanvas=function(){return d},this.getCtx=function(){return e},this.clear=function(){e.clearRect(b.size/-2,b.size/-2,b.size,b.size)},this.draw=function(a){b.scaleColor||b.trackColor?e.getImageData&&e.putImageData?c?e.putImageData(c,0,0):(k(),c=e.getImageData(0,0,b.size*f,b.size*f)):(this.clear(),k()):this.clear(),e.lineCap=b.lineCap;var d;d="function"==typeof b.barColor?b.barColor(a):b.barColor,h(d,b.lineWidth,a/100)}.bind(this),this.animate=function(a,c){var d=Date.now();b.onStart(a,c);var e=function(){var f=Math.min(Date.now()-d,b.animate.duration),g=b.easing(this,f,a,c-a,b.animate.duration);this.draw(g),b.onStep(a,c,g),f>=b.animate.duration?b.onStop(a,c):j(e)}.bind(this);j(e)}.bind(this)},c=function(a,c){var d={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:5,lineCap:"round",lineWidth:3,trackWidth:void 0,size:110,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(a,b,c,d,e){return b/=e/2,1>b?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},onStart:function(a,b){},onStep:function(a,b,c){},onStop:function(a,b){}};if("undefined"!=typeof b)d.renderer=b;else{if("undefined"==typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");d.renderer=SVGRenderer}var e={},f=0,g=function(){this.el=a,this.options=e;for(var b in d)d.hasOwnProperty(b)&&(e[b]=c&&"undefined"!=typeof c[b]?c[b]:d[b],"function"==typeof e[b]&&(e[b]=e[b].bind(this)));"string"==typeof e.easing&&"undefined"!=typeof jQuery&&jQuery.isFunction(jQuery.easing[e.easing])?e.easing=jQuery.easing[e.easing]:e.easing=d.easing,"number"==typeof e.animate&&(e.animate={duration:e.animate,enabled:!0}),"boolean"!=typeof e.animate||e.animate||(e.animate={duration:1e3,enabled:e.animate}),this.renderer=new e.renderer(a,e),this.renderer.draw(f),a.dataset&&a.dataset.percent?this.update(parseFloat(a.dataset.percent)):a.getAttribute&&a.getAttribute("data-percent")&&this.update(parseFloat(a.getAttribute("data-percent")))}.bind(this);this.update=function(a){return a=parseFloat(a),e.animate.enabled?this.renderer.animate(f,a):this.renderer.draw(a),f=a,this}.bind(this),this.disableAnimation=function(){return e.animate.enabled=!1,this},this.enableAnimation=function(){return e.animate.enabled=!0,this},g()};a.fn.easyPieChart=function(b){return this.each(function(){var d;a.data(this,"easyPieChart")||(d=a.extend({},b,a(this).data()),a.data(this,"easyPieChart",new c(this,d)))})}}); -------------------------------------------------------------------------------- /assets/js/jquery.countTo.js: -------------------------------------------------------------------------------- 1 | (function (factory) { 2 | if (typeof define === 'function' && define.amd) { 3 | // AMD 4 | define(['jquery'], factory); 5 | } else if (typeof exports === 'object') { 6 | // CommonJS 7 | factory(require('jquery')); 8 | } else { 9 | // Browser globals 10 | factory(jQuery); 11 | } 12 | }(function ($) { 13 | var CountTo = function (element, options) { 14 | this.$element = $(element); 15 | this.options = $.extend({}, CountTo.DEFAULTS, this.dataOptions(), options); 16 | this.init(); 17 | }; 18 | 19 | CountTo.DEFAULTS = { 20 | from: 0, // the number the element should start at 21 | to: 0, // the number the element should end at 22 | speed: 1000, // how long it should take to count between the target numbers 23 | refreshInterval: 100, // how often the element should be updated 24 | decimals: 0, // the number of decimal places to show 25 | formatter: formatter, // handler for formatting the value before rendering 26 | onUpdate: null, // callback method for every time the element is updated 27 | onComplete: null // callback method for when the element finishes updating 28 | }; 29 | 30 | CountTo.prototype.init = function () { 31 | this.value = this.options.from; 32 | this.loops = Math.ceil(this.options.speed / this.options.refreshInterval); 33 | this.loopCount = 0; 34 | this.increment = (this.options.to - this.options.from) / this.loops; 35 | }; 36 | 37 | CountTo.prototype.dataOptions = function () { 38 | var options = { 39 | from: this.$element.data('from'), 40 | to: this.$element.data('to'), 41 | speed: this.$element.data('speed'), 42 | refreshInterval: this.$element.data('refresh-interval'), 43 | decimals: this.$element.data('decimals') 44 | }; 45 | 46 | var keys = Object.keys(options); 47 | 48 | for (var i in keys) { 49 | var key = keys[i]; 50 | 51 | if (typeof(options[key]) === 'undefined') { 52 | delete options[key]; 53 | } 54 | } 55 | 56 | return options; 57 | }; 58 | 59 | CountTo.prototype.update = function () { 60 | this.value += this.increment; 61 | this.loopCount++; 62 | 63 | this.render(); 64 | 65 | if (typeof(this.options.onUpdate) == 'function') { 66 | this.options.onUpdate.call(this.$element, this.value); 67 | } 68 | 69 | if (this.loopCount >= this.loops) { 70 | clearInterval(this.interval); 71 | this.value = this.options.to; 72 | 73 | if (typeof(this.options.onComplete) == 'function') { 74 | this.options.onComplete.call(this.$element, this.value); 75 | } 76 | } 77 | }; 78 | 79 | CountTo.prototype.render = function () { 80 | var formattedValue = this.options.formatter.call(this.$element, this.value, this.options); 81 | this.$element.text(formattedValue); 82 | }; 83 | 84 | CountTo.prototype.restart = function () { 85 | this.stop(); 86 | this.init(); 87 | this.start(); 88 | }; 89 | 90 | CountTo.prototype.start = function () { 91 | this.stop(); 92 | this.render(); 93 | this.interval = setInterval(this.update.bind(this), this.options.refreshInterval); 94 | }; 95 | 96 | CountTo.prototype.stop = function () { 97 | if (this.interval) { 98 | clearInterval(this.interval); 99 | } 100 | }; 101 | 102 | CountTo.prototype.toggle = function () { 103 | if (this.interval) { 104 | this.stop(); 105 | } else { 106 | this.start(); 107 | } 108 | }; 109 | 110 | function formatter(value, options) { 111 | return value.toFixed(options.decimals); 112 | } 113 | 114 | $.fn.countTo = function (option) { 115 | return this.each(function () { 116 | var $this = $(this); 117 | var data = $this.data('countTo'); 118 | var init = !data || typeof(option) === 'object'; 119 | var options = typeof(option) === 'object' ? option : {}; 120 | var method = typeof(option) === 'string' ? option : 'start'; 121 | 122 | if (init) { 123 | if (data) data.stop(); 124 | $this.data('countTo', data = new CountTo(this, options)); 125 | } 126 | 127 | data[method].call(data); 128 | }); 129 | }; 130 | })); 131 | -------------------------------------------------------------------------------- /assets/js/wow.js: -------------------------------------------------------------------------------- 1 | /*! WOW - v1.1.3 - 2016-05-06 2 | * Copyright (c) 2016 Matthieu Aussaguel;*/(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.createEvent=function(a,b,c,d){var e;return null==b&&(b=!1),null==c&&(c=!1),null==d&&(d=null),null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e},a.prototype.emitEvent=function(a,b){return null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)?a["on"+b]():void 0},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a,b){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.resetAnimation=f(this.resetAnimation,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),null!=a.scrollContainer&&(this.config.scrollContainer=document.querySelector(a.scrollContainer)),this.animationNameCache=new c,this.wowEvent=this.util().createEvent(this.config.boxClass)}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null,scrollContainer:null},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],c=0,d=b.length;d>c;c++)f=b[c],g.push(function(){var a,b,c,d;for(c=f.addedNodes||[],d=[],a=0,b=c.length;b>a;a++)e=c[a],d.push(this.doSync(e));return d}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(b){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyle(a),a.className=a.className+" "+this.config.animateClass,null!=this.config.callback&&this.config.callback(a),this.util().emitEvent(a,this.wowEvent),this.util().addEvent(a,"animationend",this.resetAnimation),this.util().addEvent(a,"oanimationend",this.resetAnimation),this.util().addEvent(a,"webkitAnimationEnd",this.resetAnimation),this.util().addEvent(a,"MSAnimationEnd",this.resetAnimation),a},e.prototype.applyStyle=function(a,b){var c,d,e;return d=a.getAttribute("data-wow-duration"),c=a.getAttribute("data-wow-delay"),e=a.getAttribute("data-wow-iteration"),this.animate(function(f){return function(){return f.customStyle(a,b,d,c,e)}}(this))},e.prototype.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),e.prototype.resetStyle=function(){var a,b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.style.visibility="visible");return e},e.prototype.resetAnimation=function(a){var b;return a.type.toLowerCase().indexOf("animationend")>=0?(b=a.target||a.srcElement,b.className=b.className.replace(this.config.animateClass,"").trim()):void 0},e.prototype.customStyle=function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a},e.prototype.vendors=["moz","webkit"],e.prototype.vendorSet=function(a,b){var c,d,e,f;d=[];for(c in b)e=b[c],a[""+c]=e,d.push(function(){var b,d,g,h;for(g=this.vendors,h=[],b=0,d=g.length;d>b;b++)f=g[b],h.push(a[""+f+c.charAt(0).toUpperCase()+c.substr(1)]=e);return h}.call(this));return d},e.prototype.vendorCSS=function(a,b){var c,e,f,g,h,i;for(h=d(a),g=h.getPropertyCSSValue(b),f=this.vendors,c=0,e=f.length;e>c;c++)i=f[c],g=g||h.getPropertyCSSValue("-"+i+"-"+b);return g},e.prototype.animationName=function(a){var b;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=d(a).getPropertyValue("animation-name")}return"none"===b?"":b},e.prototype.cacheAnimationName=function(a){return this.animationNameCache.set(a,this.animationName(a))},e.prototype.cachedAnimationName=function(a){return this.animationNameCache.get(a)},e.prototype.scrollHandler=function(){return this.scrolled=!0},e.prototype.scrollCallback=function(){var a;return!this.scrolled||(this.scrolled=!1,this.boxes=function(){var b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],a&&(this.isVisible(a)?this.show(a):e.push(a));return e}.call(this),this.boxes.length||this.config.live)?void 0:this.stop()},e.prototype.offsetTop=function(a){for(var b;void 0===a.offsetTop;)a=a.parentNode;for(b=a.offsetTop;a=a.offsetParent;)b+=a.offsetTop;return b},e.prototype.isVisible=function(a){var b,c,d,e,f;return c=a.getAttribute("data-wow-offset")||this.config.offset,f=this.config.scrollContainer&&this.config.scrollContainer.scrollTop||window.pageYOffset,e=f+Math.min(this.element.clientHeight,this.util().innerHeight())-c,d=this.offsetTop(a),b=d+a.clientHeight,e>=d&&b>=f},e.prototype.util=function(){return null!=this._util?this._util:this._util=new b},e.prototype.disabled=function(){return!this.config.mobile&&this.util().isMobile(navigator.userAgent)},e}()}).call(this); -------------------------------------------------------------------------------- /blog/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/__init__.py -------------------------------------------------------------------------------- /blog/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /blog/__pycache__/admin.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/__pycache__/admin.cpython-310.pyc -------------------------------------------------------------------------------- /blog/__pycache__/apps.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/__pycache__/apps.cpython-310.pyc -------------------------------------------------------------------------------- /blog/__pycache__/models.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/__pycache__/models.cpython-310.pyc -------------------------------------------------------------------------------- /blog/__pycache__/urls.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/__pycache__/urls.cpython-310.pyc -------------------------------------------------------------------------------- /blog/__pycache__/views.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/__pycache__/views.cpython-310.pyc -------------------------------------------------------------------------------- /blog/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import * 3 | 4 | admin.site.register(Article) 5 | admin.site.register(Comment) 6 | -------------------------------------------------------------------------------- /blog/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class BlogConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'blog' 7 | verbose_name = 'بلاگ' 8 | -------------------------------------------------------------------------------- /blog/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-24 09:34 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | initial = True 9 | 10 | dependencies = [ 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='Article', 16 | fields=[ 17 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('image', models.ImageField(upload_to='articles/images')), 19 | ('title', models.CharField(max_length=50)), 20 | ('body', models.TextField()), 21 | ('created_at', models.DateTimeField(auto_now_add=True)), 22 | ], 23 | options={ 24 | 'verbose_name': 'مقاله', 25 | 'verbose_name_plural': 'مقالات', 26 | }, 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /blog/migrations/0002_alter_article_options_comment.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-26 18:07 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('blog', '0001_initial'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterModelOptions( 15 | name='article', 16 | options={'ordering': ('-created_at',), 'verbose_name': 'مقاله', 'verbose_name_plural': 'مقاله'}, 17 | ), 18 | migrations.CreateModel( 19 | name='Comment', 20 | fields=[ 21 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 22 | ('name', models.CharField(max_length=100)), 23 | ('created_at', models.DateTimeField(auto_now_add=True)), 24 | ('body', models.TextField()), 25 | ('email', models.EmailField(max_length=254)), 26 | ('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='blog.article')), 27 | ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='blog.comment')), 28 | ], 29 | options={ 30 | 'verbose_name': 'نظر', 31 | 'verbose_name_plural': 'نظرات', 32 | }, 33 | ), 34 | ] 35 | -------------------------------------------------------------------------------- /blog/migrations/0003_alter_article_body.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-28 14:46 2 | 3 | from django.db import migrations 4 | import tinymce.models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('blog', '0002_alter_article_options_comment'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='article', 16 | name='body', 17 | field=tinymce.models.HTMLField(), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /blog/migrations/0004_alter_article_options_alter_comment_options_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-30 23:49 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | import tinymce.models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('blog', '0003_alter_article_body'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterModelOptions( 16 | name='article', 17 | options={'ordering': ('-created_at',), 'verbose_name': 'مقالات', 'verbose_name_plural': 'مقاله'}, 18 | ), 19 | migrations.AlterModelOptions( 20 | name='comment', 21 | options={'verbose_name': 'نظرات', 'verbose_name_plural': 'نظر'}, 22 | ), 23 | migrations.AlterField( 24 | model_name='article', 25 | name='body', 26 | field=tinymce.models.HTMLField(verbose_name='متن'), 27 | ), 28 | migrations.AlterField( 29 | model_name='article', 30 | name='created_at', 31 | field=models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت'), 32 | ), 33 | migrations.AlterField( 34 | model_name='article', 35 | name='image', 36 | field=models.ImageField(upload_to='articles/images', verbose_name='تصویر'), 37 | ), 38 | migrations.AlterField( 39 | model_name='article', 40 | name='title', 41 | field=models.CharField(max_length=50, verbose_name='تیتر'), 42 | ), 43 | migrations.AlterField( 44 | model_name='comment', 45 | name='article', 46 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='blog.article', verbose_name='مقاله'), 47 | ), 48 | migrations.AlterField( 49 | model_name='comment', 50 | name='body', 51 | field=models.TextField(verbose_name='متن'), 52 | ), 53 | migrations.AlterField( 54 | model_name='comment', 55 | name='created_at', 56 | field=models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت'), 57 | ), 58 | migrations.AlterField( 59 | model_name='comment', 60 | name='email', 61 | field=models.EmailField(max_length=254, verbose_name='ایمیل'), 62 | ), 63 | migrations.AlterField( 64 | model_name='comment', 65 | name='name', 66 | field=models.CharField(max_length=100, verbose_name='نام'), 67 | ), 68 | migrations.AlterField( 69 | model_name='comment', 70 | name='parent', 71 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='blog.comment', verbose_name='کامنت والد'), 72 | ), 73 | ] 74 | -------------------------------------------------------------------------------- /blog/migrations/0005_alter_article_image.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-07-01 00:05 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('blog', '0004_alter_article_options_alter_comment_options_and_more'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='article', 15 | name='image', 16 | field=models.ImageField(upload_to='images/articles', verbose_name='تصویر'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /blog/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/migrations/__init__.py -------------------------------------------------------------------------------- /blog/migrations/__pycache__/0001_initial.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/migrations/__pycache__/0001_initial.cpython-310.pyc -------------------------------------------------------------------------------- /blog/migrations/__pycache__/0002_alter_article_options_comment.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/migrations/__pycache__/0002_alter_article_options_comment.cpython-310.pyc -------------------------------------------------------------------------------- /blog/migrations/__pycache__/0003_alter_article_body.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/migrations/__pycache__/0003_alter_article_body.cpython-310.pyc -------------------------------------------------------------------------------- /blog/migrations/__pycache__/0004_alter_article_options_alter_comment_options_and_more.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/migrations/__pycache__/0004_alter_article_options_alter_comment_options_and_more.cpython-310.pyc -------------------------------------------------------------------------------- /blog/migrations/__pycache__/0005_alter_article_image.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/migrations/__pycache__/0005_alter_article_image.cpython-310.pyc -------------------------------------------------------------------------------- /blog/migrations/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/blog/migrations/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /blog/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.urls import reverse 3 | from tinymce import models as tiny_models 4 | 5 | 6 | class Article(models.Model): 7 | image = models.ImageField(upload_to='images/articles', verbose_name='تصویر') 8 | title = models.CharField(max_length=50, verbose_name='تیتر') 9 | body = tiny_models.HTMLField(verbose_name='متن') 10 | created_at = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت') 11 | 12 | def __str__(self) -> str: 13 | return f'-{self.title}' 14 | 15 | def get_absolute_url(self) -> str: 16 | return reverse('blog:article_details', args=[self.id]) 17 | 18 | class Meta: 19 | ordering = ('-created_at',) 20 | verbose_name = 'مقالات' 21 | verbose_name_plural = 'مقاله' 22 | 23 | 24 | class Comment(models.Model): 25 | article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments', verbose_name='مقاله') 26 | name = models.CharField(max_length=100, verbose_name='نام') 27 | created_at = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت') 28 | body = models.TextField(verbose_name='متن') 29 | email = models.EmailField(verbose_name='ایمیل') 30 | parent = models.ForeignKey('self', on_delete=models.CASCADE, related_name='replies', null=True, blank=True, verbose_name='کامنت والد') 31 | 32 | def __str__(self) -> str: 33 | return f'{self.name}: {self.body[:15]}...' 34 | 35 | class Meta: 36 | verbose_name = 'نظرات' 37 | verbose_name_plural = 'نظر' 38 | -------------------------------------------------------------------------------- /blog/templates/blog/all_articles.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% load static %} 3 | 4 | {% block title %} 5 | Sample Project 6 | {% endblock %} 7 | 8 | 9 | {% block nav_bar %} 10 | 21 | {% endblock %} 22 | 23 | 24 | {% block content %} 25 | {% if articles %} 26 |
27 |
28 |
29 | {% for article in articles %} 30 | 31 |
32 |
33 |
34 | / 35 |
36 |
37 |

{{ article.title }}

38 |

{{ article.body|safe|truncatewords:30 }}

39 |
بیشتر بدانید
40 |
41 |
42 |
43 | {% endfor %} 44 |
45 |
46 | 47 | {% if articles.has_other_pages %} 48 | 82 | {% endif %} 83 |
84 |
85 |
86 |
87 |
88 | {% else %} 89 |
90 |
91 |
92 |
93 |

هنوز مقاله ای نیست

94 |
95 |
96 |
97 |
98 | {% endif %} 99 | {% endblock %} -------------------------------------------------------------------------------- /blog/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /blog/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | 4 | app_name = 'blog' 5 | 6 | urlpatterns = [ 7 | path('all-articles', views.all_articles, name='all_articles'), 8 | path('/article-details', views.article_details, name='article_details'), 9 | path('search/', views.search, name='search'), 10 | ] 11 | 12 | -------------------------------------------------------------------------------- /blog/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render, get_object_or_404 2 | from django.http import HttpResponse 3 | from .models import Article, Comment 4 | from django.core.paginator import Paginator 5 | 6 | 7 | def all_articles(request) -> HttpResponse: 8 | objects_list = Article.objects.order_by('-created_at') 9 | paginator = Paginator(objects_list, 6) 10 | page_num = request.GET.get('page') 11 | articles = paginator.get_page(page_num) 12 | return render(request, 'blog/all_articles.html', {'articles': articles}) 13 | 14 | 15 | def article_details(request, pk) -> HttpResponse: 16 | article = get_object_or_404(Article, id=pk) 17 | recent_articles = Article.objects.order_by('-created_at') 18 | if request.method == 'POST': 19 | name = request.POST.get('name') 20 | email = request.POST.get('email') 21 | body = request.POST.get('body') 22 | parent_id = request.POST.get('parent_id') 23 | Comment.objects.create(name=name, email=email, body=body, article=article, parent_id=parent_id) 24 | return render(request, 'blog/article_details.html', {'article': article, 'recent_articles': recent_articles}) 25 | 26 | 27 | def search(request) -> HttpResponse: 28 | q = request.GET.get('q') 29 | articles = Article.objects.filter(title__icontains=q) 30 | paginator = Paginator(articles, 6) 31 | page_num = request.GET.get('page') 32 | objects_list = paginator.get_page(page_num) 33 | return render(request, "blog/all_articles.html", {'articles': objects_list}) 34 | -------------------------------------------------------------------------------- /books/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/__init__.py -------------------------------------------------------------------------------- /books/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /books/__pycache__/admin.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/__pycache__/admin.cpython-310.pyc -------------------------------------------------------------------------------- /books/__pycache__/apps.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/__pycache__/apps.cpython-310.pyc -------------------------------------------------------------------------------- /books/__pycache__/models.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/__pycache__/models.cpython-310.pyc -------------------------------------------------------------------------------- /books/__pycache__/urls.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/__pycache__/urls.cpython-310.pyc -------------------------------------------------------------------------------- /books/__pycache__/views.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/__pycache__/views.cpython-310.pyc -------------------------------------------------------------------------------- /books/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import * 3 | 4 | admin.site.register(Book) 5 | admin.site.register(Comment) 6 | -------------------------------------------------------------------------------- /books/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class BooksConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'books' 7 | verbose_name = 'کتاب ها' 8 | 9 | -------------------------------------------------------------------------------- /books/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-29 15:53 2 | 3 | from django.db import migrations, models 4 | import tinymce.models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | initial = True 10 | 11 | dependencies = [ 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Book', 17 | fields=[ 18 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 19 | ('image', models.ImageField(upload_to='books/images')), 20 | ('title', models.CharField(max_length=50)), 21 | ('body', tinymce.models.HTMLField()), 22 | ('created_at', models.DateTimeField(auto_now_add=True)), 23 | ], 24 | options={ 25 | 'verbose_name': 'کتاب', 26 | 'verbose_name_plural': 'کتاب', 27 | 'ordering': ('-created_at',), 28 | }, 29 | ), 30 | ] 31 | -------------------------------------------------------------------------------- /books/migrations/0002_comment.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-29 16:31 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('books', '0001_initial'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='Comment', 16 | fields=[ 17 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('name', models.CharField(max_length=100)), 19 | ('created_at', models.DateTimeField(auto_now_add=True)), 20 | ('body', models.TextField()), 21 | ('email', models.EmailField(max_length=254)), 22 | ('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='books.book')), 23 | ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='books.comment')), 24 | ], 25 | options={ 26 | 'verbose_name': 'نظر', 27 | 'verbose_name_plural': 'نظرات', 28 | }, 29 | ), 30 | ] 31 | -------------------------------------------------------------------------------- /books/migrations/0003_alter_book_options_alter_comment_options_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-30 23:49 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | import tinymce.models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('books', '0002_comment'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterModelOptions( 16 | name='book', 17 | options={'ordering': ('-created_at',), 'verbose_name': 'کتاب ها', 'verbose_name_plural': 'کتاب'}, 18 | ), 19 | migrations.AlterModelOptions( 20 | name='comment', 21 | options={'verbose_name': 'نظرات', 'verbose_name_plural': 'نظر'}, 22 | ), 23 | migrations.AlterField( 24 | model_name='book', 25 | name='body', 26 | field=tinymce.models.HTMLField(verbose_name='متن'), 27 | ), 28 | migrations.AlterField( 29 | model_name='book', 30 | name='created_at', 31 | field=models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت'), 32 | ), 33 | migrations.AlterField( 34 | model_name='book', 35 | name='image', 36 | field=models.ImageField(upload_to='books/images', verbose_name='تصویر'), 37 | ), 38 | migrations.AlterField( 39 | model_name='book', 40 | name='title', 41 | field=models.CharField(max_length=50, verbose_name='تیتر'), 42 | ), 43 | migrations.AlterField( 44 | model_name='comment', 45 | name='body', 46 | field=models.TextField(verbose_name='متن'), 47 | ), 48 | migrations.AlterField( 49 | model_name='comment', 50 | name='book', 51 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='books.book', verbose_name='کتاب'), 52 | ), 53 | migrations.AlterField( 54 | model_name='comment', 55 | name='created_at', 56 | field=models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت'), 57 | ), 58 | migrations.AlterField( 59 | model_name='comment', 60 | name='email', 61 | field=models.EmailField(max_length=254, verbose_name='ایمیل'), 62 | ), 63 | migrations.AlterField( 64 | model_name='comment', 65 | name='name', 66 | field=models.CharField(max_length=100, verbose_name='نام'), 67 | ), 68 | migrations.AlterField( 69 | model_name='comment', 70 | name='parent', 71 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='books.comment', verbose_name='کامنت والد'), 72 | ), 73 | ] 74 | -------------------------------------------------------------------------------- /books/migrations/0004_alter_book_image.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-07-01 00:05 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('books', '0003_alter_book_options_alter_comment_options_and_more'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='book', 15 | name='image', 16 | field=models.ImageField(upload_to='images/books', verbose_name='تصویر'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /books/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/migrations/__init__.py -------------------------------------------------------------------------------- /books/migrations/__pycache__/0001_initial.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/migrations/__pycache__/0001_initial.cpython-310.pyc -------------------------------------------------------------------------------- /books/migrations/__pycache__/0002_comment.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/migrations/__pycache__/0002_comment.cpython-310.pyc -------------------------------------------------------------------------------- /books/migrations/__pycache__/0003_alter_book_options_alter_comment_options_and_more.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/migrations/__pycache__/0003_alter_book_options_alter_comment_options_and_more.cpython-310.pyc -------------------------------------------------------------------------------- /books/migrations/__pycache__/0004_alter_book_image.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/migrations/__pycache__/0004_alter_book_image.cpython-310.pyc -------------------------------------------------------------------------------- /books/migrations/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/books/migrations/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /books/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.urls import reverse 3 | from tinymce import models as tiny_models 4 | 5 | 6 | class Book(models.Model): 7 | image = models.ImageField(upload_to='images/books', verbose_name='تصویر') 8 | title = models.CharField(max_length=50, verbose_name='تیتر') 9 | body = tiny_models.HTMLField(verbose_name='متن') 10 | created_at = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت') 11 | 12 | def __str__(self) -> str: 13 | return f'-{self.title}' 14 | 15 | def get_absolute_url(self) -> str: 16 | return reverse('books:book_details', args=[self.id]) 17 | 18 | class Meta: 19 | ordering = ('-created_at',) 20 | verbose_name = 'کتاب ها' 21 | verbose_name_plural = 'کتاب' 22 | 23 | 24 | class Comment(models.Model): 25 | book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='comments', verbose_name='کتاب') 26 | name = models.CharField(max_length=100, verbose_name='نام') 27 | created_at = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت') 28 | body = models.TextField(verbose_name='متن') 29 | email = models.EmailField(verbose_name='ایمیل') 30 | parent = models.ForeignKey('self', on_delete=models.CASCADE, related_name='replies', null=True, blank=True, verbose_name='کامنت والد') 31 | 32 | def __str__(self) -> str: 33 | return f'{self.name}: {self.body[:15]}...' 34 | 35 | class Meta: 36 | verbose_name = 'نظرات' 37 | verbose_name_plural = 'نظر' 38 | -------------------------------------------------------------------------------- /books/templates/books/all_books.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% load static %} 3 | 4 | {% block title %} 5 | Sample Project 6 | {% endblock %} 7 | 8 | 9 | {% block nav_bar %} 10 | 21 | {% endblock %} 22 | 23 | 24 | {% block content %} 25 | {% if books %} 26 |
27 |
28 |
29 | {% for book in books %} 30 | 31 |
32 |
33 |
34 | / 35 |
36 |
37 |

{{ book.title }}

38 |

{{ book.body|safe|truncatewords:30 }}

39 |
بیشتر بدانید
40 |
41 |
42 |
43 | {% endfor %} 44 |
45 |
46 | 47 | {% if books.has_other_pages %} 48 | 82 | {% endif %} 83 |
84 |
85 |
86 |
87 |
88 | {% else %} 89 |
90 |
91 |
92 |
93 |

هنوز کتابی نیست

94 |
95 |
96 |
97 |
98 | {% endif %} 99 | {% endblock %} -------------------------------------------------------------------------------- /books/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /books/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | 4 | app_name = 'books' 5 | 6 | urlpatterns = [ 7 | path('all-books', views.all_books, name='all_books'), 8 | path('/book-details', views.book_details, name='book_details'), 9 | path('search/', views.search, name='search'), 10 | ] 11 | -------------------------------------------------------------------------------- /books/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render, get_object_or_404 2 | from django.http import HttpResponse 3 | from .models import * 4 | from django.core.paginator import Paginator 5 | 6 | 7 | def all_books(request) -> HttpResponse: 8 | objects_list = Book.objects.order_by('-created_at') 9 | paginator = Paginator(objects_list, 3) 10 | page_num = request.GET.get('page') 11 | books = paginator.get_page(page_num) 12 | return render(request, 'books/all_books.html', {'books': books}) 13 | 14 | 15 | def book_details(request, pk) -> HttpResponse: 16 | book = get_object_or_404(Book, id=pk) 17 | recent_books = Book.objects.order_by('-created_at') 18 | if request.method == 'POST': 19 | name = request.POST.get('name') 20 | email = request.POST.get('email') 21 | body = request.POST.get('body') 22 | parent_id = request.POST.get('parent_id') 23 | Comment.objects.create(name=name, email=email, body=body, book=book, parent_id=parent_id) 24 | return render(request, 'books/book_details.html', {'book': book, 'recent_books': recent_books}) 25 | 26 | 27 | def search(request) -> HttpResponse: 28 | q = request.GET.get('q') 29 | books = Book.objects.filter(title__icontains=q) 30 | paginator = Paginator(books, 3) 31 | page_num = request.GET.get('page') 32 | objects_list = paginator.get_page(page_num) 33 | return render(request, "books/all_books.html", {'books': objects_list}) 34 | -------------------------------------------------------------------------------- /context_processors/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/context_processors/__init__.py -------------------------------------------------------------------------------- /context_processors/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/context_processors/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /context_processors/__pycache__/context_processors.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/context_processors/__pycache__/context_processors.cpython-310.pyc -------------------------------------------------------------------------------- /context_processors/context_processors.py: -------------------------------------------------------------------------------- 1 | from home.models import Social 2 | 3 | 4 | def socials(request) -> dict: 5 | socials = Social.objects.all() 6 | return {'socials': socials} 7 | -------------------------------------------------------------------------------- /home/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/__init__.py -------------------------------------------------------------------------------- /home/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /home/__pycache__/admin.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/__pycache__/admin.cpython-310.pyc -------------------------------------------------------------------------------- /home/__pycache__/apps.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/__pycache__/apps.cpython-310.pyc -------------------------------------------------------------------------------- /home/__pycache__/forms.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/__pycache__/forms.cpython-310.pyc -------------------------------------------------------------------------------- /home/__pycache__/models.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/__pycache__/models.cpython-310.pyc -------------------------------------------------------------------------------- /home/__pycache__/urls.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/__pycache__/urls.cpython-310.pyc -------------------------------------------------------------------------------- /home/__pycache__/views.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/__pycache__/views.cpython-310.pyc -------------------------------------------------------------------------------- /home/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import * 3 | 4 | admin.site.register(Foreword) 5 | admin.site.register(AboutMe) 6 | admin.site.register(CountUp) 7 | admin.site.register(Target) 8 | admin.site.register(CulturalActivity) 9 | admin.site.register(Video) 10 | admin.site.register(ContactUs) 11 | admin.site.register(Social) 12 | -------------------------------------------------------------------------------- /home/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class HomeConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'home' 7 | verbose_name = 'خانه' 8 | 9 | -------------------------------------------------------------------------------- /home/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from .models import ContactUs 3 | 4 | 5 | class ContactUsForm(forms.ModelForm): 6 | class Meta: 7 | model = ContactUs 8 | fields = ('name', 'email', 'text') 9 | widgets = { 10 | "name": forms.TextInput(attrs={'class': 'form-control', 'placeholder': '*نام...'}), 11 | "email": forms.TextInput(attrs={'class': 'form-control', 'placeholder': '*ایمیل...'}), 12 | "text": forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'پیام شما...', 'clos': '5', 'row': '5', 'style': 'height: 145px'}) 13 | } 14 | -------------------------------------------------------------------------------- /home/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-16 12:29 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | initial = True 9 | 10 | dependencies = [ 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='AboutMe', 16 | fields=[ 17 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('image', models.ImageField(upload_to='welcome/images')), 19 | ('welcome', models.CharField(max_length=400)), 20 | ('description', models.TextField()), 21 | ], 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /home/migrations/0002_alter_aboutme_options_aboutme_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-16 12:45 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='aboutme', 15 | options={'verbose_name': 'درباره من', 'verbose_name_plural': 'درباره من'}, 16 | ), 17 | migrations.AddField( 18 | model_name='aboutme', 19 | name='name', 20 | field=models.CharField(blank=True, max_length=200, null=True), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /home/migrations/0003_alter_aboutme_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-16 12:45 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0002_alter_aboutme_options_aboutme_name'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='aboutme', 15 | name='name', 16 | field=models.CharField(max_length=200), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /home/migrations/0004_rename_aboutme_foreword.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-16 14:00 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0003_alter_aboutme_name'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameModel( 14 | old_name='AboutMe', 15 | new_name='Foreword', 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /home/migrations/0005_aboutme_alter_foreword_options.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-21 01:56 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0004_rename_aboutme_foreword'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='AboutMe', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('image', models.ImageField(upload_to='about_me/images')), 18 | ('question', models.CharField(max_length=80)), 19 | ('text', models.TextField()), 20 | ], 21 | ), 22 | migrations.AlterModelOptions( 23 | name='foreword', 24 | options={'verbose_name': 'پیشگفتار', 'verbose_name_plural': 'پیشگفتار'}, 25 | ), 26 | ] 27 | -------------------------------------------------------------------------------- /home/migrations/0006_countup_alter_aboutme_options_alter_foreword_options.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-21 13:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0005_aboutme_alter_foreword_options'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='CountUp', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('published', models.CharField(max_length=5000)), 18 | ('being_printed', models.CharField(max_length=5000)), 19 | ('sold_volume', models.CharField(max_length=5000)), 20 | ('idea', models.CharField(max_length=5000)), 21 | ], 22 | options={ 23 | 'verbose_name': 'شمارشگر', 24 | 'verbose_name_plural': 'شمارشگر', 25 | }, 26 | ), 27 | migrations.AlterModelOptions( 28 | name='aboutme', 29 | options={'verbose_name': 'درباره من', 'verbose_name_plural': 'درباره من'}, 30 | ), 31 | migrations.AlterModelOptions( 32 | name='foreword', 33 | options={'verbose_name': 'خانه', 'verbose_name_plural': 'خانه'}, 34 | ), 35 | ] 36 | -------------------------------------------------------------------------------- /home/migrations/0007_target.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-21 13:48 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0006_countup_alter_aboutme_options_alter_foreword_options'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='Target', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('question', models.CharField(max_length=100)), 18 | ('title', models.CharField(max_length=100)), 19 | ('text', models.TextField()), 20 | ], 21 | options={ 22 | 'verbose_name': 'هدف', 23 | 'verbose_name_plural': 'هدف', 24 | }, 25 | ), 26 | ] 27 | -------------------------------------------------------------------------------- /home/migrations/0008_bookslider.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-21 19:32 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0007_target'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='BookSlider', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('book_name', models.CharField(max_length=100)), 18 | ('text', models.TextField()), 19 | ], 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /home/migrations/0009_bookslider_image.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-21 19:36 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0008_bookslider'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='bookslider', 15 | name='image', 16 | field=models.ImageField(blank=True, null=True, upload_to='book_slider/images'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /home/migrations/0010_alter_bookslider_image.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-21 19:36 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0009_bookslider_image'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='bookslider', 15 | name='image', 16 | field=models.ImageField(upload_to='book_slider/images'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /home/migrations/0011_rename_book_name_bookslider_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-21 19:38 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0010_alter_bookslider_image'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='bookslider', 15 | old_name='book_name', 16 | new_name='name', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /home/migrations/0012_culturalactivity_alter_bookslider_options.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-23 15:09 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0011_rename_book_name_bookslider_name'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='CulturalActivity', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('title', models.CharField(max_length=150)), 18 | ('activity', models.TextField()), 19 | ], 20 | options={ 21 | 'verbose_name': 'فعلیت های فرهنگی', 22 | 'verbose_name_plural': 'فعالیت های فرهنگی', 23 | }, 24 | ), 25 | migrations.AlterModelOptions( 26 | name='bookslider', 27 | options={'verbose_name': 'اسلایدر کتابها', 'verbose_name_plural': 'اسلایدر کتابها'}, 28 | ), 29 | ] 30 | -------------------------------------------------------------------------------- /home/migrations/0013_culturalactivity_image.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-23 15:21 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0012_culturalactivity_alter_bookslider_options'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='culturalactivity', 15 | name='image', 16 | field=models.ImageField(blank=True, null=True, upload_to='cultural/images'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /home/migrations/0014_alter_culturalactivity_options.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-24 09:34 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0013_culturalactivity_image'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='culturalactivity', 15 | options={'ordering': ('-title',), 'verbose_name': 'فعلیت های فرهنگی', 'verbose_name_plural': 'فعالیت های فرهنگی'}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /home/migrations/0015_delete_bookslider.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-29 15:53 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0014_alter_culturalactivity_options'), 10 | ] 11 | 12 | operations = [ 13 | migrations.DeleteModel( 14 | name='BookSlider', 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /home/migrations/0016_video.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-29 19:33 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0015_delete_bookslider'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='Video', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('title', models.CharField(max_length=100)), 18 | ('image', models.ImageField(upload_to='images/Video')), 19 | ('url', models.URLField()), 20 | ('description', models.TextField()), 21 | ], 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /home/migrations/0017_alter_video_options.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-29 19:45 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0016_video'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='video', 15 | options={'verbose_name': 'ویدیو', 'verbose_name_plural': 'ویدیو'}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /home/migrations/0018_contactus.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-30 10:41 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0017_alter_video_options'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='ContactUs', 15 | fields=[ 16 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('title', models.CharField(max_length=100)), 18 | ('text', models.TextField()), 19 | ('email', models.EmailField(max_length=254)), 20 | ('created_at', models.DateTimeField(auto_now_add=True)), 21 | ], 22 | options={ 23 | 'verbose_name': 'پیام', 24 | 'verbose_name_plural': 'پیام ها', 25 | }, 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /home/migrations/0019_rename_title_contactus_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-30 12:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0018_contactus'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='contactus', 15 | old_name='title', 16 | new_name='name', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /home/migrations/0020_social.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-30 20:14 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0019_rename_title_contactus_name'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='Social', 15 | fields=[ 16 | ('title', models.CharField(max_length=250, primary_key=True, serialize=False)), 17 | ('url', models.URLField(max_length=1000)), 18 | ], 19 | options={ 20 | 'verbose_name': 'شبکه های اجتماعی', 21 | 'verbose_name_plural': 'شبکه های اجتماعی', 22 | }, 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /home/migrations/0021_alter_contactus_options_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-06-30 23:49 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0020_social'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='contactus', 15 | options={'verbose_name': 'پیام ها', 'verbose_name_plural': 'پیام'}, 16 | ), 17 | migrations.AlterModelOptions( 18 | name='culturalactivity', 19 | options={'ordering': ('-title',), 'verbose_name': 'فعالیت های فرهنگی', 'verbose_name_plural': 'فعالیت های فرهنگی'}, 20 | ), 21 | migrations.AlterModelOptions( 22 | name='foreword', 23 | options={'verbose_name': 'معرفی', 'verbose_name_plural': 'معرفی'}, 24 | ), 25 | migrations.AlterModelOptions( 26 | name='social', 27 | options={'verbose_name': 'شبکه های اجتماعی', 'verbose_name_plural': 'شبکه اجتماعی'}, 28 | ), 29 | migrations.AlterField( 30 | model_name='aboutme', 31 | name='image', 32 | field=models.ImageField(upload_to='about_me/images', verbose_name='تصویر'), 33 | ), 34 | migrations.AlterField( 35 | model_name='aboutme', 36 | name='question', 37 | field=models.CharField(max_length=80, verbose_name='سوال'), 38 | ), 39 | migrations.AlterField( 40 | model_name='aboutme', 41 | name='text', 42 | field=models.TextField(verbose_name='متن'), 43 | ), 44 | migrations.AlterField( 45 | model_name='contactus', 46 | name='created_at', 47 | field=models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت'), 48 | ), 49 | migrations.AlterField( 50 | model_name='contactus', 51 | name='email', 52 | field=models.EmailField(max_length=254, verbose_name='ایمیل'), 53 | ), 54 | migrations.AlterField( 55 | model_name='contactus', 56 | name='name', 57 | field=models.CharField(max_length=100, verbose_name='نام'), 58 | ), 59 | migrations.AlterField( 60 | model_name='contactus', 61 | name='text', 62 | field=models.TextField(verbose_name='متن'), 63 | ), 64 | migrations.AlterField( 65 | model_name='countup', 66 | name='being_printed', 67 | field=models.CharField(max_length=5000, verbose_name='کتاب های در دست چاپ'), 68 | ), 69 | migrations.AlterField( 70 | model_name='countup', 71 | name='idea', 72 | field=models.CharField(max_length=5000, verbose_name='ایده های کار نشده'), 73 | ), 74 | migrations.AlterField( 75 | model_name='countup', 76 | name='published', 77 | field=models.CharField(max_length=5000, verbose_name='کتاب های منتشر شده'), 78 | ), 79 | migrations.AlterField( 80 | model_name='countup', 81 | name='sold_volume', 82 | field=models.CharField(max_length=5000, verbose_name='جلدهای فروخته شده'), 83 | ), 84 | migrations.AlterField( 85 | model_name='culturalactivity', 86 | name='activity', 87 | field=models.TextField(verbose_name='فعالیت'), 88 | ), 89 | migrations.AlterField( 90 | model_name='culturalactivity', 91 | name='image', 92 | field=models.ImageField(blank=True, null=True, upload_to='cultural/images', verbose_name='تصویر'), 93 | ), 94 | migrations.AlterField( 95 | model_name='culturalactivity', 96 | name='title', 97 | field=models.CharField(max_length=150, verbose_name='تیتر'), 98 | ), 99 | migrations.AlterField( 100 | model_name='foreword', 101 | name='description', 102 | field=models.TextField(verbose_name='توضیحات'), 103 | ), 104 | migrations.AlterField( 105 | model_name='foreword', 106 | name='image', 107 | field=models.ImageField(upload_to='welcome/images', verbose_name='تصویر'), 108 | ), 109 | migrations.AlterField( 110 | model_name='foreword', 111 | name='name', 112 | field=models.CharField(max_length=200, verbose_name='نام'), 113 | ), 114 | migrations.AlterField( 115 | model_name='foreword', 116 | name='welcome', 117 | field=models.CharField(max_length=400, verbose_name='متن خوش آمد گویی'), 118 | ), 119 | migrations.AlterField( 120 | model_name='social', 121 | name='title', 122 | field=models.CharField(max_length=250, primary_key=True, serialize=False, verbose_name='نام شبکه اجتماعی'), 123 | ), 124 | migrations.AlterField( 125 | model_name='social', 126 | name='url', 127 | field=models.URLField(max_length=1000, verbose_name='لینک'), 128 | ), 129 | migrations.AlterField( 130 | model_name='target', 131 | name='question', 132 | field=models.CharField(max_length=100, verbose_name='سوال'), 133 | ), 134 | migrations.AlterField( 135 | model_name='target', 136 | name='text', 137 | field=models.TextField(verbose_name='متن'), 138 | ), 139 | migrations.AlterField( 140 | model_name='target', 141 | name='title', 142 | field=models.CharField(max_length=100, verbose_name='تیتر'), 143 | ), 144 | migrations.AlterField( 145 | model_name='video', 146 | name='description', 147 | field=models.TextField(verbose_name='توضیحات'), 148 | ), 149 | migrations.AlterField( 150 | model_name='video', 151 | name='image', 152 | field=models.ImageField(upload_to='images/Video', verbose_name='تصویر'), 153 | ), 154 | migrations.AlterField( 155 | model_name='video', 156 | name='title', 157 | field=models.CharField(max_length=100, verbose_name='تیتر'), 158 | ), 159 | migrations.AlterField( 160 | model_name='video', 161 | name='url', 162 | field=models.URLField(verbose_name='لینک'), 163 | ), 164 | ] 165 | -------------------------------------------------------------------------------- /home/migrations/0022_alter_aboutme_image_alter_culturalactivity_image_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.0.5 on 2022-07-01 00:05 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0021_alter_contactus_options_and_more'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='aboutme', 15 | name='image', 16 | field=models.ImageField(upload_to='images/about_me', verbose_name='تصویر'), 17 | ), 18 | migrations.AlterField( 19 | model_name='culturalactivity', 20 | name='image', 21 | field=models.ImageField(blank=True, null=True, upload_to='images/cultural', verbose_name='تصویر'), 22 | ), 23 | migrations.AlterField( 24 | model_name='foreword', 25 | name='image', 26 | field=models.ImageField(upload_to='images/welcome', verbose_name='تصویر'), 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /home/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__init__.py -------------------------------------------------------------------------------- /home/migrations/__pycache__/0001_initial.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0001_initial.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0002_alter_aboutme_options_aboutme_name.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0002_alter_aboutme_options_aboutme_name.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0003_alter_aboutme_name.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0003_alter_aboutme_name.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0004_rename_aboutme_foreword.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0004_rename_aboutme_foreword.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0005_aboutme_alter_foreword_options.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0005_aboutme_alter_foreword_options.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0006_countup_alter_aboutme_options_alter_foreword_options.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0006_countup_alter_aboutme_options_alter_foreword_options.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0007_target.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0007_target.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0008_bookslider.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0008_bookslider.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0009_bookslider_image.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0009_bookslider_image.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0010_alter_bookslider_image.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0010_alter_bookslider_image.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0011_rename_book_name_bookslider_name.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0011_rename_book_name_bookslider_name.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0012_culturalactivity_alter_bookslider_options.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0012_culturalactivity_alter_bookslider_options.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0013_culturalactivity_image.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0013_culturalactivity_image.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0014_alter_culturalactivity_options.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0014_alter_culturalactivity_options.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0015_delete_bookslider.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0015_delete_bookslider.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0016_video.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0016_video.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0017_alter_video_options.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0017_alter_video_options.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0018_contactus.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0018_contactus.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0019_rename_title_contactus_name.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0019_rename_title_contactus_name.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0020_social.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0020_social.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0021_alter_contactus_options_and_more.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0021_alter_contactus_options_and_more.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/0022_alter_aboutme_image_alter_culturalactivity_image_and_more.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/0022_alter_aboutme_image_alter_culturalactivity_image_and_more.cpython-310.pyc -------------------------------------------------------------------------------- /home/migrations/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/home/migrations/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /home/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | class Foreword(models.Model): 5 | image = models.ImageField(upload_to='images/welcome', verbose_name='تصویر') 6 | name = models.CharField(max_length=200, verbose_name='نام') 7 | welcome = models.CharField(max_length=400, verbose_name='متن خوش آمد گویی') 8 | description = models.TextField(verbose_name='توضیحات') 9 | 10 | def __str__(self) -> str: 11 | return self.welcome 12 | 13 | class Meta: 14 | verbose_name = 'معرفی' 15 | verbose_name_plural = 'معرفی' 16 | 17 | 18 | class AboutMe(models.Model): 19 | image = models.ImageField(upload_to='images/about_me', verbose_name='تصویر') 20 | question = models.CharField(max_length=80, verbose_name='سوال') 21 | text = models.TextField(verbose_name='متن') 22 | 23 | def __str__(self) -> str: 24 | return f'{self.question}: -{self.text[:10]}...' 25 | 26 | class Meta: 27 | verbose_name = 'درباره من' 28 | verbose_name_plural = 'درباره من' 29 | 30 | 31 | class CountUp(models.Model): 32 | published = models.CharField(max_length=5000, verbose_name='کتاب های منتشر شده') 33 | being_printed = models.CharField(max_length=5000, verbose_name='کتاب های در دست چاپ') 34 | sold_volume = models.CharField(max_length=5000, verbose_name='جلدهای فروخته شده') 35 | idea = models.CharField(max_length=5000, verbose_name='ایده های کار نشده') 36 | 37 | def __str__(self) -> str: 38 | return f'منتشر شده: {self.published}' 39 | 40 | class Meta: 41 | verbose_name = 'شمارشگر' 42 | verbose_name_plural = 'شمارشگر' 43 | 44 | 45 | class Target(models.Model): 46 | question = models.CharField(max_length=100, verbose_name='سوال') 47 | title = models.CharField(max_length=100, verbose_name='تیتر') 48 | text = models.TextField(verbose_name='متن') 49 | 50 | def __str__(self) -> str: 51 | return f'{self.question} -{self.title[:10]}...' 52 | 53 | class Meta: 54 | verbose_name = 'هدف' 55 | verbose_name_plural = 'هدف' 56 | 57 | 58 | class CulturalActivity(models.Model): 59 | title = models.CharField(max_length=150, verbose_name='تیتر') 60 | activity = models.TextField(verbose_name='فعالیت') 61 | image = models.ImageField(upload_to='images/cultural', null=True, blank=True, verbose_name='تصویر') 62 | 63 | def __str__(self) -> str: 64 | return f'{self.title}' 65 | 66 | class Meta: 67 | ordering = ('-title',) 68 | verbose_name = 'فعالیت های فرهنگی' 69 | verbose_name_plural = 'فعالیت های فرهنگی' 70 | 71 | 72 | class Video(models.Model): 73 | title = models.CharField(max_length=100, verbose_name='تیتر') 74 | image = models.ImageField(upload_to='images/Video', verbose_name='تصویر') 75 | url = models.URLField(verbose_name='لینک') 76 | description = models.TextField(verbose_name='توضیحات') 77 | 78 | def __str__(self) -> str: 79 | return f'{self.title}' 80 | 81 | class Meta: 82 | verbose_name = 'ویدیو' 83 | verbose_name_plural = 'ویدیو' 84 | 85 | 86 | class ContactUs(models.Model): 87 | name = models.CharField(max_length=100, verbose_name='نام') 88 | text = models.TextField(verbose_name='متن') 89 | email = models.EmailField(verbose_name='ایمیل') 90 | created_at = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ثبت') 91 | 92 | def __str__(self) -> str: 93 | return f' شما یک پیام از طرف {self.name} دارید ' 94 | 95 | class Meta: 96 | verbose_name = 'پیام ها' 97 | verbose_name_plural = 'پیام' 98 | 99 | 100 | class Social(models.Model): 101 | title = models.CharField(max_length=250, primary_key=True, verbose_name='نام شبکه اجتماعی') 102 | url = models.URLField(max_length=1000, verbose_name='لینک') 103 | 104 | def __str__(self) -> str: 105 | return self.title 106 | 107 | class Meta: 108 | verbose_name = 'شبکه های اجتماعی' 109 | verbose_name_plural = 'شبکه اجتماعی' 110 | -------------------------------------------------------------------------------- /home/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /home/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | 4 | app_name = 'home' 5 | 6 | urlpatterns = [ 7 | path('', views.home, name='home') 8 | ] 9 | -------------------------------------------------------------------------------- /home/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.http import HttpResponse 3 | from .models import * 4 | from blog.models import * 5 | from books.models import * 6 | from .forms import * 7 | 8 | 9 | def home(request) -> HttpResponse: 10 | foreword = Foreword.objects.last() 11 | about_me = AboutMe.objects.last() 12 | count_up = CountUp.objects.last() 13 | target = Target.objects.last() 14 | books = Book.objects.order_by('-created_at')[:5] 15 | activities = CulturalActivity.objects.order_by('-title') 16 | articles = Article.objects.order_by('-created_at') 17 | video = Video.objects.last() 18 | form_class = ContactUsForm 19 | form = form_class(request.POST or None) 20 | if request.method == 'POST': 21 | form = ContactUsForm(data=request.POST) 22 | if form.is_valid(): 23 | form.save() 24 | else: 25 | form = ContactUsForm() 26 | return render(request, 'home/index.html', { 27 | 'foreword': foreword, 28 | 'about_me': about_me, 29 | 'count_up': count_up, 30 | 'target': target, 31 | 'books': books, 32 | 'activities': activities, 33 | 'articles': articles, 34 | 'video': video, 35 | 'form': form, 36 | }) 37 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SampleProject.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MortezaShoeibi/SampleProject-django/d37104eac5b67c419848ba4aa745b513ea914127/requirements.txt -------------------------------------------------------------------------------- /templates/admin/base_site.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base.html" %} 2 | {% load static %} 3 | {% block title %}مدیریت سایت علی شعیبی{% endblock %} 4 | 5 | {% block branding %} 6 |

مدیریت وبسایت

7 | {% endblock %} 8 | 9 | {% block extrastyle %} {% endblock %} 10 | 11 | {% block nav-global %}{% endblock %} 12 | -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | {% include 'includes/header_references.html' %} 7 | 8 | {% block title %} 9 | 10 | {% endblock %} 11 | 12 | 13 | 14 | 15 | 16 | {% include 'includes/loader.html' %} 17 | 42 | 43 | {% block content %} 44 | 45 | {% endblock %} 46 | 47 | {% include 'includes/footer.html' %} 48 | 49 | 50 | 51 | 52 | {% include 'includes/js_files.html' %} 53 | 54 | 55 | -------------------------------------------------------------------------------- /templates/includes/footer.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 |
4 |
5 |
6 |
7 | 10 |
11 |
12 | 21 |
22 |
23 |
24 |
25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /templates/includes/header_references.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /templates/includes/js_files.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /templates/includes/loader.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 |
4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 | --------------------------------------------------------------------------------