mirror of
https://github.com/django/django.git
synced 2024-11-22 11:57:34 +01:00
Rewrote strip_tags test file to lorem ipsum.
This commit is contained in:
parent
a8c15481f4
commit
a45f28f0ec
@ -94,8 +94,8 @@ source_suffix = ".txt"
|
||||
# The encoding of source files.
|
||||
# source_encoding = 'utf-8-sig'
|
||||
|
||||
# The root document.
|
||||
root_doc = "contents"
|
||||
# The master toctree document.
|
||||
master_doc = "contents"
|
||||
|
||||
# General substitutions.
|
||||
project = "Django"
|
||||
@ -347,7 +347,7 @@ man_pages = [
|
||||
# description, category, toctree_only)
|
||||
texinfo_documents = [
|
||||
(
|
||||
root_doc,
|
||||
master_doc,
|
||||
"django",
|
||||
"",
|
||||
"",
|
||||
|
@ -870,9 +870,9 @@ If you\(aqre in a multi\-database setup, you might have fixture data that
|
||||
you want to load onto one database, but not onto another. In this
|
||||
situation, you can add a database identifier into the names of your fixtures.
|
||||
.sp
|
||||
For example, if your \fBDATABASES\fP setting has a \(aqusers\(aq database
|
||||
defined, name the fixture \fBmydata.users.json\fP or
|
||||
\fBmydata.users.json.gz\fP and the fixture will only be loaded when you
|
||||
For example, if your \fBDATABASES\fP setting has a \(aqmaster\(aq database
|
||||
defined, name the fixture \fBmydata.master.json\fP or
|
||||
\fBmydata.master.json.gz\fP and the fixture will only be loaded when you
|
||||
specify you want to load data into the \fBmaster\fP database.
|
||||
.SS Loading fixtures from \fBstdin\fP
|
||||
.sp
|
||||
@ -1815,7 +1815,7 @@ zip files, you can use a URL like:
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
django\-admin startapp \-\-template=https://github.com/githubuser/django\-app\-template/archive/main.zip myapp
|
||||
django\-admin startapp \-\-template=https://github.com/githubuser/django\-app\-template/archive/master.zip myapp
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
|
@ -1,3 +1,3 @@
|
||||
pyenchant
|
||||
Sphinx>=4.0.0
|
||||
Sphinx>=3.1.0
|
||||
sphinxcontrib-spelling
|
||||
|
@ -1289,7 +1289,7 @@
|
||||
|
||||
<div id="ajax-error-message" class="flash flash-error">
|
||||
<span class="mini-icon mini-icon-exclamation"></span>
|
||||
Something went wrong with that request. Please try again.
|
||||
Test string that has not been stripped.
|
||||
<a href="#" class="mini-icon mini-icon-remove-close ajax-error-dismiss"></a>
|
||||
</div>
|
||||
|
||||
|
@ -1,118 +1,39 @@
|
||||
_**Prerequisite**: You are already aware of the [basics of building a HelloWorld](http://developer.android.com/training/index.html) in Android and know [how to use the APIs provided in the support library](http://developer.android.com/training/basics/fragments/support-lib.html)._
|
||||
_**Lorem:** ipsum dolor sit [amet](https://example.com), consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et [dolore magna aliqua](https://example.com)._
|
||||
|
||||
_The code example is available on [github](http://github.com/iontech/Fragments_Example "Fragments Example")._
|
||||
_Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea [commodo consequat](https://github.com)._
|
||||
_____________________________________________________________
|
||||
Ever wanted a code snippet from an Activity to be available to other activities? Perhaps a Button or a ListView, maybe a Layout or any View/ViewGroup for that matter? Fragments let us do just that.
|
||||
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||
|
||||
Necessity is the mother of invention.
|
||||
Before understanding what Fragments are and how they work, we must first realize their existence in the first place.
|
||||
Volutpat
|
||||
--------
|
||||
Volutpat est `velit` egestas (*egestas*) dui id ornare arcu odio ut. [*Non*](https://example.com) sodales neque `sodales`'s ut `etiam()`.
|
||||
|
||||
The Problem
|
||||
-----------
|
||||
Suppose we have an Android app with two Activities- [*FirstActivity*](https://github.com/iontech/Fragments_Example/blob/master/src/main/java/com/github/iontech/fragments_example/FirstActivity.java) and [*SecondActivity*](https://github.com/iontech/Fragments_Example/blob/master/src/main/java/com/github/iontech/fragments_example/SecondActivity.java).
|
||||
*FirstActivity* contains two Views, a `TextView` (*textView*) and a `Button` (*button1*); and *button1* has an `onClick()` callback that `Toast`'s a simple message "Button pressed".
|
||||
*SecondActivity* contains both the Views present in *FirstActivity* and a `Button` (*button2*).
|
||||
1. Dignissim enim sit amet venenatis urna.
|
||||
2. Scelerisque fermentum dui faucibus in ornare quam viverra orci.
|
||||
|
||||
Now we want to utilize the two layout components(Views) of *FirstActivity* in *SecondActivity*, we can go about this with two approaches:
|
||||
|
||||
1. Copy and Paste the xml elements of the two Views.
|
||||
2. Create a separate layout for common Views and reuse it using `` layout element.
|
||||
More about this [here](http://developer.android.com/training/improving-layouts/reusing-layouts.html).
|
||||
|
||||
Electing the second approach makes sense cause it enables us to make reusable layouts. Everything seems great till now. We are able to make reusable layouts and use them as many times as we want.
|
||||
|
||||
Now recollect that we have an `onClick()` callback assigned to *button1*. How do we reuse the same callback functionality of *button1* across multiple Activities? `` lets us reuse layouts and not the Activity source.
|
||||
This is where Fragments come into play.
|
||||
|
||||
Fragments
|
||||
Tristique
|
||||
---------
|
||||
<center> ![image](http://iontech.files.wordpress.com/2013/01/androidfragmentation1-264x300.png) </center>
|
||||
Fragments encompass both layout resource and Java source. Hence, unlike ``, they allow us to reuse the View components along with their functionality, if needed.
|
||||
Fragments were first introduced in Honeycomb(API 11), living under the `android.app` package.
|
||||
**Note**: API 11 implies that Fragments have no support for devices less than Honeycomb and, for the record, as of writing this post, [more than 50% of Android devices worldwide run versions of Android below Honeycomb](http://developer.android.com/about/dashboards/index.html). Developer disappointed? You don't have to be, cause google has been cautious enough to add the Fragment APIs to the support library. Yay!
|
||||
|
||||
In the support library Fragment APIs sit in the `android.support.v4.app` package. This post assumes that your `minSdk` support is below API 11. Hence we concentrate on the Fragment APIs of the support library.
|
||||
<center> ![image](https://placekitten.com/200/200) </center>
|
||||
|
||||
### Diving into code
|
||||
Tristique magna sit amet purus gravida quis blandit turpis.
|
||||
**Note:** Rhoncus urna neque viverra justo nec.
|
||||
|
||||
Performing code reuse with Fragments involves three major steps:
|
||||
### Fermentum dui faucibus
|
||||
|
||||
1. Creating reusable View components - Creating a layout for the fragment.
|
||||
2. Creating reusable Java source - Writing the layout's corresponding Fragment class.
|
||||
3. Employing the reusable components in Activity - Making an Activity to host this Fragment.
|
||||
Fermentum dui faucibus in ornare quam viverra orci:
|
||||
|
||||
#### 1. Creating reusable View components
|
||||
##### Creating a layout for the Fragment
|
||||
This is done precisely as we do it for our activity layouts. The layout contains a root element (ViewGroup) defining the layout, For instance in our example we use a LinearLayout and its child elements(the reusable Views) that we want to have in our fragment.
|
||||
1. Sed vulputate mi sit amet mauris commodo quis imperdiet.
|
||||
2. Quisque non tellus orci ac.
|
||||
3. Neque volutpat ac tincidunt vitae semper quis lectus.
|
||||
|
||||
> [fragment_common.xml](https://github.com/iontech/Fragments_Example/blob/master/res/layout/fragment_common.xml)
|
||||
#### Aliquet eget sit amet tellus cras adipiscing enim eu.
|
||||
##### Sodales ut etiam sit amet nisl purus in mollis nunc.
|
||||
Interdum velit euismod in pellentesque massa placerat. Iaculis urna id volutpat lacus. Non consectetur a erat nam at lectus urna. Arcu non odio euismod lacinia at quis risus. Et pharetra pharetra massa massa ultricies mi.
|
||||
|
||||
> [Diam quis enim lobortis scelerisque.](https://example.com)
|
||||
|
||||
<morbi>
|
||||
|
||||
|
||||
|
||||
<button>
|
||||
|
||||
|
||||
|
||||
#### 2. Creating reusable Java source
|
||||
##### Writing the layout's corresponding Fragment class
|
||||
|
||||
> [CommonFragment.java](https://github.com/iontech/Fragments_Example/blob/master/src/main/java/com/github/iontech/fragments_example/CommonFragment.java)
|
||||
|
||||
This class will inherit `Fragment` class and must override the `onCreateView()` method.
|
||||
In this method we inflate the fragment layout using the following line of code.
|
||||
|
||||
View view = inflater.inflate(R.layout.fragment_common, container, false);
|
||||
|
||||
*container* is the parent ViewGroup that the fragment's UI should be attached to.
|
||||
Once inflation is done, we can perform various operations on the component views of the fragment.
|
||||
Accessing the view elements from the layout is done exactly as we do in an Activity (using `findViewById()`) except that we use the `View` for the fragment's UI or an instance of the host Activity.
|
||||
|
||||
In Activity we access Views(a Button for our example) as follows
|
||||
|
||||
Button button1 = (Button) findViewById(R.id.button1);
|
||||
In Fragment, we need to use the inflated view(if in `onCreateView()`) or get the instance of the host activity and access the views through this instance(when in a [lifecycle callback](http://developer.android.com/guide/components/fragments.html#Lifecycle "Fragment lifecycle callbacks") after `onCreateView()`, I generally do it in `onActivityCreated()`).
|
||||
|
||||
Button button1 = (Button) view.findViewById(R.id.button1);
|
||||
or
|
||||
|
||||
Button button1 = (Button) getActivity().findViewById(R.id.button1);
|
||||
`getActivity()` returns the instance of the Activity that is hosting this Fragment.
|
||||
|
||||
Finally, in `onCreateView()` we must return the View for the fragment's UI.
|
||||
|
||||
return view;
|
||||
|
||||
#### 3. Employing the reusable components in Activity
|
||||
##### Making an Activity to host this Fragment
|
||||
This is done in two ways, statically by adding `` elements into the Activity layout or dynamically, at run time, by using `FragmentTransaction`s.
|
||||
**Note**: First thing we need to ensure is that our Activity extends `FragmentActivity` class instead of the regular `Activity`.
|
||||
If the `minSdk` is API 11 or higher, then we can leave our inheritance to `Activity` class and not bother about `FragmentActivity`.
|
||||
|
||||
##### a. Static approach to hosting the Fragments
|
||||
###### Adding `` element in activity layout
|
||||
|
||||
> [activity_static.xml](https://github.com/iontech/Fragments_Example/blob/master/res/layout/activity_static.xml)
|
||||
|
||||
Inorder to statically add a Fragment into your Activity, just add `` element with the necessary layout attributes and the `android:name` attribute set to the fully qualified class name of the corresponding Fragment.
|
||||
|
||||
|
||||
##### b. Dynamic approach
|
||||
###### Using `FragmentTransaction`s
|
||||
|
||||
> [ADynamicFragmentActivity.java](https://github.com/iontech/Fragments_Example/blob/master/src/main/java/com/github/iontech/fragments_example/ADynamicFragmentActivity.java)
|
||||
|
||||
Can be done using `FragmentManager` and `FragmentTransaction` classes. We call `add()`, in our FragmentActivity implementation, on an instance of `FragmentTransaction` to add a fragment to the host Activity. But that is not enough to show the fragment on the screen, i.e. the FragmentTransaction is not complete. We must call `commit()` to finish the transaction.
|
||||
|
||||
CommonFragment fragment = new CommonFragment();
|
||||
FragmentManager manager = getSupportFragmentManager();
|
||||
FragmentTransaction transaction = manager.beginTransaction();
|
||||
transaction.add(R.id.dynamicFragmentLayout, fragment);
|
||||
transaction.commit();
|
||||
|
||||
Similarly Fragments can be removed(`remove()`) as well as replaced(`replace()`) from the activity all at runtime.
|
||||
|
||||
Congratulations, now you can use Fragments to write reusable code and easily host them over multiple activities.
|
||||
|
||||
Please try again. Till next time.
|
||||
Test string that has not been stripped.
|
||||
|
@ -129,7 +129,7 @@ class TestUtilsHtml(SimpleTestCase):
|
||||
stripped = strip_tags(content)
|
||||
elapsed = datetime.now() - start
|
||||
self.assertEqual(elapsed.seconds, 0)
|
||||
self.assertIn("Please try again.", stripped)
|
||||
self.assertIn("Test string that has not been stripped.", stripped)
|
||||
self.assertNotIn("<", stripped)
|
||||
|
||||
def test_strip_spaces_between_tags(self):
|
||||
|
Loading…
Reference in New Issue
Block a user