django-responsive2 Documentation

Similar documents
Roman Numeral Converter Documentation

Python wrapper for Viscosity.app Documentation

TPS Documentation. Release Thomas Roten

django-idioticon Documentation

django-cas Documentation

Python Project Example Documentation

chatterbot-weather Documentation

Python simple arp table reader Documentation

django-users2 Documentation

Django Wordpress API Documentation

PyCRC Documentation. Release 1.0

django-reinhardt Documentation

I2C LCD Documentation

Aircrack-ng python bindings Documentation

sainsmart Documentation

Simple libtorrent streaming module Documentation

Release Nicholas A. Del Grosso

Poulpe Documentation. Release Edouard Klein

google-search Documentation

DNS Zone Test Documentation

Python Schema Generator Documentation

Redis Timeseries Documentation

Mantis STIX Importer Documentation

Simple Binary Search Tree Documentation

Release Fulfil.IO Inc.

dj-libcloud Documentation

Pykemon Documentation

smartfilesorter Documentation

open-helpdesk Documentation

django-telegram-bot Documentation

Google Domain Shared Contacts Client Documentation

django CMS Export Objects Documentation

Python State Machine Documentation

OpenUpgrade Library Documentation

Frontier Documentation

Game Server Manager Documentation

django-private-chat Documentation

gunny Documentation Release David Blewett

withenv Documentation

pydrill Documentation

doconv Documentation Release Jacob Mourelos

CID Documentation. Release Francis Reyes

pyldavis Documentation

Python AMT Tools Documentation

Aldryn Installer Documentation

django-stored-messages Documentation

Python AutoTask Web Services Documentation

smsghussd Documentation

Release Ralph Offinger

nacelle Documentation

API Wrapper Documentation

Python State Machine Documentation

e24paymentpipe Documentation

eventbrite-sdk-python Documentation

django-bootstrap3 Documentation

AnyDo API Python Documentation

django-composite-foreignkey Documentation

Poetaster. Release 0.1.1

yardstick Documentation

django-composite-foreignkey Documentation

PyCon APAC 2014 Documentation

PyZillow Documentation

gpib-ctypes Documentation

Python data pipelines similar to R Documentation

syslog-ng Apache Kafka destination

xmljson Documentation

ejpiaj Documentation Release Marek Wywiał

Job Submitter Documentation

Python Finite State Machine. Release 0.1.5

lazy-object-proxy Release 1.3.1

dicompyler-core Documentation

dublincore Documentation

pvl Documentation Release William Trevor Olson

invenio-groups Documentation

invenio-formatter Documentation

Dragon Mapper Documentation

xmodels Documentation

Airoscript-ng Documentation

ProxySQL Tools Documentation

Gearthonic Documentation

Connexion Sqlalchemy Utils Documentation

pytest-benchmark Release 2.5.0

django simple pagination Documentation

Microlab Instruments Documentation

Release Manu Phatak

Archan. Release 2.0.1

Durga Documentation. Release dev2. transcode

cwmon-mysql Release 0.5.0

django mail admin Documentation

OTX to MISP. Release 1.4.2

Infoblox Client Documentation

Face Recognition Documentation

Django MFA Documentation

redis-lock Release 3.2.0

MT940 Documentation. Release Rick van Hattem (wolph)

mozilla-django-oidc Documentation

timegate Documentation

otree Virtual Machine Manager Documentation

django-dynamic-db-router Documentation

mlpy Documentation Release Astrid Jackson

Transcription:

django-responsive2 Documentation Release 0.1.3 Mishbah Razzaque Sep 27, 2017

Contents 1 django-responsive2 3 1.1 Why would you use django-responsive2?................................ 3 1.2 Using django-responsive2 in your views................................. 4 1.3 Quickstart................................................ 4 1.4 Configuration............................................... 5 1.5 Documentation.............................................. 6 1.6 Credits.................................................. 7 2 Installation 9 3 Usage 11 4 Contributing 13 4.1 Types of Contributions.......................................... 13 4.2 Get Started!................................................ 14 4.3 Pull Request Guidelines......................................... 15 4.4 Tips.................................................... 15 5 Credits 17 5.1 Development Lead............................................ 17 5.2 Contributors............................................... 17 6 History 19 6.1 0.1.0 (2014-10-15)............................................ 19 i

ii

Contents: Contents 1

2 Contents

CHAPTER 1 django-responsive2 django-responsive2 is an experimental Django app that gives web designers tools for building responsive websites. It can dynamically swap content based on breakpoints. Why would you use django-responsive2? This project was inspired by Twitter Bootstrap s Responsive Utilities. Bootstrap provides some handful helper classes, for faster mobile-friendly development. These can be used for showing and hiding content by device via media query combined with large, small, and medium devices. Similarly django-responsive2 can be used to render different content based on device screen sizes and pixel ratios. However, while it is very useful to show/hide content using css display property, Bootstrap Responsive Utilities does not actually prevent the content from being loaded on to the page. It is best explained through examples. Sample example template using django-responsive2: <div class="container"> <div class="row"> {% if device.is_xsmall or device.is_small %} <div class="col-sm"> {# Rendered for x-small/small screen devices #} <img src="images/myimage_sm.jpg" alt="descriptive alt tag" /> </div> {% elif device.is_medium %} <div class="col-md"> {# Rendered for medium screen devices #} <img src="images/myimage_md.jpg" alt="descriptive alt tag" /> </div> {% else %} <div class="col-lg"> {# Rendered for large/xlarge screen devices #} <img src="images/myimage_lg.jpg" alt="descriptive alt tag" /> </div> {% endif %} 3

</div> </div> In this very simple example, using the Bootstrap Responsive Utilities, all 3 images would have been loaded on to the page, wasting precious bandwidth, together with increase in page load time. In comparison, using django-responsive2, only col-sm will be rendered for small screen devices (e.g. an iphone), col-m will be displayed for medium screen devices (e.g. an ipad) and lastly col-lg will be visible for large screen devices or any devices that do not match the rules for small/medium devices. Using django-responsive2 in your views You can also use the django-responsive2 in your Django views to do particular things based on the matched media queries for the visitors device. The ResponsiveMiddleware middleware sets the device attribute on every request object, so you can use request.device to get the device information for your visitors: MIDDLEWARE_CLASSES=( 'responsive.middleware.responsivemiddleware' ) Here s an (verbose) example of what the a view could look like, request.device.matched returns a list of matched media queries for the visitors device. e.g. ['small', 'retina'] def home(request): if 'retina' in request.device.matched: thumbnail_high_resolution = True else: thumbnail_high_resolution = False if request.device.is_small: hide_ads = True else: hide_ads = False context = { 'thumbnail_high_resolution': thumbnail_high_resolution, 'hide_ads': hide_ads } Quickstart 1. Install django-responsive2: 4 Chapter 1. django-responsive2

pip install django-responsive2 2. Add responsive to INSTALLED_APPS: INSTALLED_APPS = ( 'responsive', ) 3. Add django.core.context_processors.request and responsive. context_processors.device to your TEMPLATE_CONTEXT_PROCESSORS: TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.request', 'responsive.context_processors.device', ) 4. Add the ResponsiveMiddleware to MIDDLEWARE_CLASSES: MIDDLEWARE_CLASSES = ( 'responsive.middleware.responsivemiddleware', ) Configuration django-responsive2 lets you to define the breakpoints at which your layout will change, adapting to different screen sizes. Here s the default breakpoints: RESPONSIVE_MEDIA_QUERIES = { 'small': { 'verbose_name': _('Small screens'), 'min_width': None, 'max_width': 640, }, 'medium': { 'verbose_name': _('Medium screens'), 'min_width': 641, 'max_width': 1024, }, 'large': { 'verbose_name': _('Large screens'), 'min_width': 1025, 'max_width': 1440, }, 'xlarge': { 'verbose_name': _('XLarge screens'), 'min_width': 1441, 'max_width': 1920, }, 'xxlarge': { 1.4. Configuration 5

} } 'verbose_name': _('XXLarge screens'), 'min_width': 1921, 'max_width': None, ** Borrowed from ZURB Foundation framework, see http://foundation.zurb.com/docs/media-queries.html While there are several different items we can query on, the ones used for django-responsive2 are min-width, maxwidth, min-height and max-height. min_width Rules applied for any device width over the value defined in the config. max_width Rules applied for any device width under the value defined in the config. min_height Rules applied for any device height over the value defined in the config. max_height Rules applied for any device height under the value defined in the config. pixel_ratio Rules applied for any device with devicepixelratio defined in the config. You can override the default media queries by defining own in your RESPONSIVE_MEDIA_QUERIES in your settings.py. For example: RESPONSIVE_MEDIA_QUERIES = { 'iphone': { 'verbose_name': _('iphone Retina'), 'min_width': 320, # mobile first queries } }, 'pixel_ratio': 2 For every media queries, the device object will have a is_foo attribute, where FOO is the name of the media query. This attribute returns True/False. Continuing with the example RESPONSIVE_MEDIA_QUERIES settings above, here s a simple corresponding template: <div class="container"> <div class="row"> {% if device.is_iphone %} {# this snippet will only be rendered for retina devices with minimum device width 320 #} <div class="app-store"> <a href="#">available on the App Store</a> </div> {% endif %} </div> </div> Documentation The full documentation is at https://django-responsive2.readthedocs.org. 6 Chapter 1. django-responsive2

Credits This app started as a clone of django-responsive with some minor modifications to fit my own project requirements. So a big thank you to @mlavin for his hard work. Shout out to @jezdez for the awesome django-appconf used by this project to handle default configurations. 1.6. Credits 7

8 Chapter 1. django-responsive2

CHAPTER 2 Installation 1. Install django-responsive2: pip install django-responsive2 2. Add responsive to INSTALLED_APPS: INSTALLED_APPS = ( 'responsive', ) 3. Add django.core.context_processors.request and responsive. context_processors.device to your TEMPLATE_CONTEXT_PROCESSORS: TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.request', 'responsive.context_processors.device', ) 4. Add the ResponsiveMiddleware to MIDDLEWARE_CLASSES: MIDDLEWARE_CLASSES = ( 'responsive.middleware.responsivemiddleware', ) 9

10 Chapter 2. Installation

CHAPTER 3 Usage django-responsive2 lets you to define the breakpoints at which your layout will change, adapting to different screen sizes. Here s the default breakpoints: RESPONSIVE_MEDIA_QUERIES = { 'small': { 'verbose_name': _('Small screens'), 'min_width': None, 'max_width': 640, }, 'medium': { 'verbose_name': _('Medium screens'), 'min_width': 641, 'max_width': 1024, }, 'large': { 'verbose_name': _('Large screens'), 'min_width': 1025, 'max_width': 1440, }, 'xlarge': { 'verbose_name': _('XLarge screens'), 'min_width': 1441, 'max_width': 1920, }, 'xxlarge': { 'verbose_name': _('XXLarge screens'), 'min_width': 1921, 'max_width': None, } } ** Borrowed from ZURB Foundation framework, see http://foundation.zurb.com/docs/media-queries.html While there are several different items we can query on, the ones used for django-responsive2 are min-width, maxwidth, min-height and max-height. 11

min_width Rules applied for any device width over the value defined in the config. max_width Rules applied for any device width under the value defined in the config. min_height Rules applied for any device height over the value defined in the config. max_height Rules applied for any device height under the value defined in the config. pixel_ratio Rules applied for any device with devicepixelratio defined in the config. You can override the default media queries by defining own in your RESPONSIVE_MEDIA_QUERIES in your settings.py. For example: RESPONSIVE_MEDIA_QUERIES = { 'iphone': { 'verbose_name': _('iphone Retina'), 'min_width': 320, 'pixel_ratio': 2 }, } For every media queries, the device object will have a is_foo attribute, where FOO is the name of the media query. This attribute returns True/False. Continuing with the example RESPONSIVE_MEDIA_QUERIES settings above, here s a simple corresponding template: <div class="container"> <div class="row"> {% if device.is_iphone %} {# this snippet will only be rendered for retina devices with min_width = 320 #} <div class="app-store"> <a href="#">available on the App Store</a> </div> {% endif %} </div> </div> 12 Chapter 3. Usage

CHAPTER 4 Contributing Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. You can contribute in many ways: Types of Contributions Report Bugs Report bugs at https://github.com/mishbahr/django-responsive2/issues. If you are reporting a bug, please include: Your operating system name and version. Any details about your local setup that might be helpful in troubleshooting. Detailed steps to reproduce the bug. Fix Bugs Look through the GitHub issues for bugs. Anything tagged with bug is open to whoever wants to implement it. Implement Features Look through the GitHub issues for features. Anything tagged with feature is open to whoever wants to implement it. 13

Write Documentation django-responsive2 could always use more documentation, whether as part of the official django-responsive2 docs, in docstrings, or even on the web in blog posts, articles, and such. Submit Feedback The best way to send feedback is to file an issue at https://github.com/mishbahr/django-responsive2/issues. If you are proposing a feature: Explain in detail how it would work. Keep the scope as narrow as possible, to make it easier to implement. Remember that this is a volunteer-driven project, and that contributions are welcome :) Get Started! Ready to contribute? Here s how to set up django-responsive2 for local development. 1. Fork the django-responsive2 repo on GitHub. 2. Clone your fork locally: $ git clone git@github.com:your_name_here/django-responsive2.git 3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development: $ mkvirtualenv django-responsive2 $ cd django-responsive2/ $ python setup.py develop 4. Create a branch for local development: $ git checkout -b name-of-your-bugfix-or-feature Now you can make your changes locally. 5. When you re done making changes, check that your changes pass flake8 and the tests, including testing other Python versions with tox: $ flake8 responsive tests $ python setup.py test $ tox To get flake8 and tox, just pip install them into your virtualenv. 6. Commit your changes and push your branch to GitHub: $ git add. $ git commit -m "Your detailed description of your changes." $ git push origin name-of-your-bugfix-or-feature 7. Submit a pull request through the GitHub website. 14 Chapter 4. Contributing

Pull Request Guidelines Before you submit a pull request, check that it meets these guidelines: 1. The pull request should include tests. 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.rst. 3. The pull request should work for Python 2.6, 2.7, and 3.3, and for PyPy. Check https://travis-ci.org/mishbahr/ django-responsive2/pull_requests and make sure that the tests pass for all supported Python versions. Tips To run a subset of tests: $ python -m unittest tests.test_responsive 4.3. Pull Request Guidelines 15

16 Chapter 4. Contributing

CHAPTER 5 Credits This app started as a clone of django-responsive with some minor modifications to fit my own project requirements. So a big thank you to @mlavin for his hard work. Shout out to @jezdez for the awesome django-appconf used by this project to handle default configurations. Development Lead Mishbah Razzaque <mishbahx@gmail.com> Contributors Ashley Wilson <scifilem@gmail.com> 17

18 Chapter 5. Credits

CHAPTER 6 History 0.1.0 (2014-10-15) First release on PyPI. 19